microsoft-graph-querying — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited microsoft-graph-querying (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 answerSteps 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 whatsuggest_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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.