Skip to content
Back to skills

Files

BSecurity

OneDrive personal storage and SharePoint document libraries, both reached through the shared Microsoft Graph `/drives` endpoint: drive and item addressing, sharing permissions, storage quotas, file search, and the offboarding file-transfer workflow.

  • 46 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 5, 2026
ai-agentsshellapisecuritydocumentation

Works with

  • claude code
  • api

Security analysis

B88/100
  • criticalAccesses sensitive system or user directories

Pro shows the line behind each finding and how to fix it

Scanned September 5, 2026

npx -y skills add WYRE-AI/msp-claude-plugins --skill files --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Files?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Files
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/wyre-ai-files/badge)](https://www.skillsdirectory.com/skills/wyre-ai-files)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "Microsoft 365 Files"
description: >
  OneDrive personal storage and SharePoint document libraries, both reached through
  the shared Microsoft Graph `/drives` endpoint: drive and item addressing, sharing
  permissions, storage quotas, file search, and the offboarding file-transfer
  workflow.
when_to_use: >-
  When investigating M365 file access, sharing, storage-quota, or file-search issues across
  OneDrive and SharePoint. Use
  when: onedrive, m365 files, sharepoint files, onedrive quota, file sharing m365, onedrive
  permissions, m365 storage, find file m365, onedrive access, or sharepoint document library.
---

# Microsoft 365 Files (OneDrive & SharePoint)

## Overview

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.

## Anti-triggers

- **Files on the machine this session is running on** — "read the
  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.
- **Restoring a deleted or ransomware-encrypted file** — past the
  recycle bin and retention window, Graph has nothing to return; use
  the `backup-pack` or `kaseya/datto-saas-protection`.
- **MSP documentation, runbooks, and stored credentials** — those live
  in the documentation platform, not the customer's OneDrive; use
  `kaseya/it-glue` or `hudu`.
- **A tenant-wide external-sharing posture review** — this skill
  inspects one item's permissions; the policy question across the
  tenant or the fleet is `m365-security` or `cipp`.

## Core Concepts

| 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}` |

## Graph API Patterns

### Get a User's OneDrive Info (Quota)

```http
GET /v1.0/users/{userId}/drive?$select=id,name,quota
```

**Response:**
```json
{
  "id": "drive-guid",
  "name": "OneDrive",
  "quota": {
    "used": 5368709120,
    "remaining": 1127428915200,
    "total": 1132797624320,
    "state": "normal"
  }
}
```

`state` values: `normal`, `nearing`, `critical`, `exceeded`

### List Files in Root

```http
GET /v1.0/users/{userId}/drive/root/children?$select=id,name,size,lastModifiedDateTime,webUrl,folder,file
```

### List Files in a Specific Folder

```http
GET /v1.0/users/{userId}/drive/items/{folderId}/children?$select=id,name,size,lastModifiedDateTime,webUrl
```

### Search for Files Across OneDrive

```http
GET /v1.0/users/{userId}/drive/root/search(q='budget 2024')?$select=id,name,parentReference,lastModifiedDateTime,webUrl
```

### Get File Sharing Permissions

```http
GET /v1.0/drives/{driveId}/items/{itemId}/permissions
```

**Response includes:**
```json
{
  "value": [
    {
      "id": "perm-id",
      "roles": ["write"],
      "grantedToV2": {
        "user": { "displayName": "Bob Manager", "email": "bmanager@contoso.com" }
      },
      "link": null
    },
    {
      "id": "link-id",
      "roles": ["read"],
      "link": {
        "type": "view",
        "scope": "anonymous",
        "webUrl": "https://contoso-my.sharepoint.com/..."
      }
    }
  ]
}
```

### Share a File (Create Sharing Link)

```http
POST /v1.0/drives/{driveId}/items/{itemId}/createLink
Content-Type: application/json

{
  "type": "view",
  "scope": "organization"
}
```

`type`: `view`, `edit`, `embed`
`scope`: `anonymous`, `organization`, `users`

### Grant Direct Access to a File/Folder

```http
POST /v1.0/drives/{driveId}/items/{itemId}/invite
Content-Type: application/json

{
  "requireSignIn": true,
  "sendInvitation": false,
  "roles": ["read"],
  "recipients": [
    { "email": "manager@contoso.com" }
  ],
  "message": "Shared as part of employee transition"
}
```

### Remove a Permission

```http
DELETE /v1.0/drives/{driveId}/items/{itemId}/permissions/{permissionId}
```

### Transfer OneDrive Access (Offboarding)

Grant another user access to the departing employee's entire OneDrive:

```http
POST /v1.0/users/{departingUserId}/drive/root/invite
Content-Type: application/json

{
  "requireSignIn": true,
  "sendInvitation": false,
  "roles": ["write"],
  "recipients": [{ "email": "manager@contoso.com" }]
}
```

> Full ownership transfer (changing site admin) requires SharePoint admin PowerShell:
> `Set-SPOSite -Identity <url> -Owner <email>`

## SharePoint Document Libraries

### List SharePoint Sites

```http
GET /v1.0/sites?search=*&$select=id,displayName,webUrl,createdDateTime
```

### List Drives (Document Libraries) in a Site

```http
GET /v1.0/sites/{siteId}/drives?$select=id,name,driveType,quota
```

### Get Files from a SharePoint Library

```http
GET /v1.0/drives/{driveId}/root/children?$select=id,name,size,lastModifiedDateTime,webUrl
```

## Common MSP Workflows

### User Can't Access a File

1. Get the file's current permissions: `GET /items/{id}/permissions`
2. Check if user has direct access or if it's link-based
3. Check if user is in a group that has access: `GET /users/{id}/memberOf`
4. If sharing link expired: create new sharing link
5. If direct access missing: add via `/invite`

### Pre-Offboarding Data Review

Before offboarding, identify files the user owns that are widely shared:

```http
GET /v1.0/users/{userId}/drive/root/search(q='*')?$select=id,name,permissions,parentReference
```

Look for items with `scope: anonymous` sharing links — these should be cleaned up or ownership transferred.

### OneDrive Quota Alert

Check users approaching quota limits:

```http
GET /v1.0/users/{userId}/drive?$select=quota
```

If `quota.state` is `nearing` (>80%) or `critical` (>90%), alert for cleanup or quota increase.

## Error Handling

| 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 |

## Permissions Required

| 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` |

## Related Skills

- [M365 Users](../users/SKILL.md) - User offboarding, OneDrive transfer
- [M365 Security](../security/SKILL.md) - Audit external sharing
- [M365 API Patterns](../api-patterns/SKILL.md) - Search syntax, pagination

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.