Microsoft 365 Files — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Microsoft 365 Files (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.
Microsoft 365 provides two file storage surfaces: OneDrive (personal, per-user) and SharePoint (team/department libraries). Both are accessible through the same Microsoft Graph /drives endpoint. MSP support tasks include investigating access issues, checking storage quotas, managing sharing permissions, and transferring file access during offboarding.
file", "find the config", "list the directory" almost always mean the local filesystem, which Claude Code's own file tools handle. This skill only reaches a customer's cloud storage through Graph, and loading it for local work wastes the call.
recycle bin and retention window, Graph has nothing to return; use the backup-pack or kaseya/datto-saas-protection.
in the documentation platform, not the customer's OneDrive; use kaseya/it-glue or hudu.
inspects one item's permissions; the policy question across the tenant or the fleet is m365-security or cipp.
| Surface | Use | Graph Resource |
|---|---|---|
| OneDrive Personal | Individual user's documents | /users/{id}/drive |
| SharePoint Site Drive | Team/department files | /sites/{id}/drives |
| SharePoint Library | Document library within a site | /drives/{driveId} |
GET /v1.0/users/{userId}/drive?$select=id,name,quotaResponse:
{
"id": "drive-guid",
"name": "OneDrive",
"quota": {
"used": 5368709120,
"remaining": 1127428915200,
"total": 1132797624320,
"state": "normal"
}
}state values: normal, nearing, critical, exceeded
GET /v1.0/users/{userId}/drive/root/children?$select=id,name,size,lastModifiedDateTime,webUrl,folder,fileGET /v1.0/users/{userId}/drive/items/{folderId}/children?$select=id,name,size,lastModifiedDateTime,webUrlGET /v1.0/users/{userId}/drive/root/search(q='budget 2024')?$select=id,name,parentReference,lastModifiedDateTime,webUrlGET /v1.0/drives/{driveId}/items/{itemId}/permissionsResponse includes:
{
"value": [
{
"id": "perm-id",
"roles": ["write"],
"grantedToV2": {
"user": { "displayName": "Bob Manager", "email": "[email protected]" }
},
"link": null
},
{
"id": "link-id",
"roles": ["read"],
"link": {
"type": "view",
"scope": "anonymous",
"webUrl": "https://contoso-my.sharepoint.com/..."
}
}
]
}POST /v1.0/drives/{driveId}/items/{itemId}/createLink
Content-Type: application/json
{
"type": "view",
"scope": "organization"
}type: view, edit, embed scope: anonymous, organization, users
POST /v1.0/drives/{driveId}/items/{itemId}/invite
Content-Type: application/json
{
"requireSignIn": true,
"sendInvitation": false,
"roles": ["read"],
"recipients": [
{ "email": "[email protected]" }
],
"message": "Shared as part of employee transition"
}DELETE /v1.0/drives/{driveId}/items/{itemId}/permissions/{permissionId}Grant another user access to the departing employee's entire OneDrive:
POST /v1.0/users/{departingUserId}/drive/root/invite
Content-Type: application/json
{
"requireSignIn": true,
"sendInvitation": false,
"roles": ["write"],
"recipients": [{ "email": "[email protected]" }]
}Full ownership transfer (changing site admin) requires SharePoint admin PowerShell: Set-SPOSite -Identity <url> -Owner <email>GET /v1.0/sites?search=*&$select=id,displayName,webUrl,createdDateTimeGET /v1.0/sites/{siteId}/drives?$select=id,name,driveType,quotaGET /v1.0/drives/{driveId}/root/children?$select=id,name,size,lastModifiedDateTime,webUrlGET /items/{id}/permissionsGET /users/{id}/memberOf/inviteBefore offboarding, identify files the user owns that are widely shared:
GET /v1.0/users/{userId}/drive/root/search(q='*')?$select=id,name,permissions,parentReferenceLook for items with scope: anonymous sharing links — these should be cleaned up or ownership transferred.
Check users approaching quota limits:
GET /v1.0/users/{userId}/drive?$select=quotaIf quota.state is nearing (>80%) or critical (>90%), alert for cleanup or quota increase.
| Error | Cause | Resolution |
|---|---|---|
itemNotFound | File or folder doesn't exist | Check path or item ID |
accessDenied | No Files.Read permission | Grant permission and admin consent |
quotaLimitReached | OneDrive full | Clean up or expand quota |
sharingDisabled | Tenant sharing policy blocks external | Review SharePoint admin settings |
| Task | Microsoft Graph Permission |
|---|---|
| Read user's files | Files.Read.All |
| Read/write files | Files.ReadWrite.All |
| Read SharePoint sites | Sites.Read.All |
| Manage sharing | Files.ReadWrite.All |
| SharePoint admin | Sites.ReadWrite.All |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.