From microsoft-graph
Use this skill when answering identity or directory questions against a client's Microsoft Entra tenant via the Microsoft Graph MCP Server for Enterprise. Teaches the RAG query loop — microsoft_graph_suggest_queries to find candidate Graph API calls, pick the best one, then microsoft_graph_get to execute it, with microsoft_graph_list_properties for entity schema. Everything is read-only and honors the caller's RBAC.
How this skill is triggered — by the user, by Claude, or both
Slash command
/microsoft-graph:queryingWhen to use
When asked any question about a tenant's users, groups, applications, devices, licenses, sign-in activity, or directory roles that should be answered through the Microsoft Graph MCP server — count users, find guests, find inactive accounts, audit MFA registration, list app inventory, check license usage. Use when: microsoft graph query, query entra, how many users, guest users, inactive accounts, users without mfa, license usage, app inventory, directory roles, suggest queries, graph get, or list properties.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
The Microsoft Graph MCP Server for Enterprise is **not** a raw Graph API passthrough. It is built around a Retrieval-Augmented-Generation (RAG) workflow: you describe what you want, the server hands you vetted candidate API calls from a curated catalog, and you execute the one that fits. Following this loop is the difference between correct answers and made-up endpoints.
The Microsoft Graph MCP Server for Enterprise is not a raw Graph API passthrough. It is built around a Retrieval-Augmented-Generation (RAG) workflow: you describe what you want, the server hands you vetted candidate API calls from a curated catalog, and you execute the one that fits. Following this loop is the difference between correct answers and made-up endpoints.
Always start with microsoft_graph_suggest_queries. Do not invent raw Graph endpoints.
Microsoft Graph is enormous and its URL/$filter/$select syntax is full of sharp edges (advanced query parameters, ConsistencyLevel headers, OData casts). The suggest_queries tool exists precisely so the model doesn't have to guess. Hand-writing a Graph URL and passing it to microsoft_graph_get is an error pattern — even when you "know" the endpoint, route through suggest_queries so you get the catalog's correct, tested form.
| Tool | Role in the loop |
|---|---|
microsoft_graph_suggest_queries | RAG search over a curated catalog of Graph API examples. Input: a natural-language intent. Output: candidate Graph API calls (endpoint, parameters, description) ranked by relevance. |
microsoft_graph_get | Executes a read-only Graph GET. Input: a Graph API call (ideally one returned by suggest_queries). Honors the caller's roles, granted scopes, and Graph throttling. |
microsoft_graph_list_properties | Returns the schema for a Graph entity — its properties and relationships. Use it when you need to know what's selectable before constructing or refining a call. |
1. suggest_queries(intent) → candidate Graph calls
2. (model) select the candidate that best matches the question
3. get(selected candidate) → data
4. (optional) list_properties(entity) → schema, to refine $select or pick the right entity
5. (model) translate the JSON result into a plain-language answer
Steps 2 and 5 are your job — suggest_queries proposes, the model disposes. When several candidates look plausible, prefer the one whose description most precisely matches the user's intent and whose parameters you can fill confidently. If a candidate needs a property you're unsure exists, call list_properties first.
microsoft_graph_suggest_queries("count of all users in the tenant") → returns candidates such as a call against the users collection with a count.microsoft_graph_get(<that candidate>).microsoft_graph_suggest_queries("users who have not registered for multi-factor authentication") → expect candidates around authentication-methods registration reporting (admin reporting surface).microsoft_graph_get(<that candidate>).microsoft_graph_list_properties("user") to confirm those properties, then re-suggest/refine.microsoft_graph_suggest_queries("external guest users in the directory") → candidates filtering the users collection on guest user type.microsoft_graph_get(<that candidate>).This needs two reads joined by the model:
microsoft_graph_suggest_queries("user accounts with no recent sign-in activity") → an inactive-users / sign-in-activity reporting candidate. Run it with microsoft_graph_get.microsoft_graph_suggest_queries("users assigned a Microsoft 365 Copilot license") → a licensed-users candidate. Run it with microsoft_graph_get.The example endpoints above are illustrative of what
suggest_queriestypically returns — don't hard-code them. Always runsuggest_queriesfor the live, tenant-appropriate candidate.
list_propertiesCall microsoft_graph_list_properties when you need the schema of an entity — for example to know whether user exposes signInActivity, assignedLicenses, or createdDateTime, or what relationships group has. Use it to:
$select properties so a get returns exactly what the question needs;user vs servicePrincipal vs device).cipp plugin).microsoft-graph-connection skill).get calls — suggest_queries exists so one good call beats ten guesses.Raw Graph JSON is not an answer. Always translate: lead with the direct answer (a count, a yes/no, a named list), then supporting detail, then — if it's an audit-style question — a recommendation. Non-technical readers should never see GUIDs or JSON unless they ask.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin microsoft-graphCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.