account-hygiene
Periodic hygiene review of a client's 1Password account for QBRs and license true-ups: reconciling active and suspended seats…
Seat-coverage and backup-health sweep for Datto SaaS Protection: finding unprotected and paused seats per customer, reading per-application backup status and detailed stats, and proposing (never silently applying) seat licence changes with datto_saas_bulk_seat_change.
Claude Code
$ npx -y skills add wyre-ai/msp-claude-plugins --skill seat-coverage --agent claude-code
Codex
$ npx skills add wyre-ai/msp-claude-plugins --skill seat-coverage -a codex -y
Cursor
$ npx skills add wyre-ai/msp-claude-plugins --skill seat-coverage -a cursor -y
Gemini CLI
$ npx skills add wyre-ai/msp-claude-plugins --skill seat-coverage -a gemini-cli -y
GitHub Copilot
$ npx skills add wyre-ai/msp-claude-plugins --skill seat-coverage -a github-copilot -y
OpenCode
$ npx skills add wyre-ai/msp-claude-plugins --skill seat-coverage -a opencode -y
Windsurf
$ npx skills add wyre-ai/msp-claude-plugins --skill seat-coverage -a windsurf -y
name: "Datto SaaS Protection Seat Coverage" description: > Seat-coverage and backup-health sweep for Datto SaaS Protection: finding unprotected and paused seats per customer, reading per-application backup status and detailed stats, and proposing (never silently applying) seat licence changes with datto_saas_bulk_seat_change. when_to_use: >- When checking which Microsoft 365 or Google Workspace users are actually backed up, or whether SaaS backups are failing. Use when: saas backup coverage, unprotected seats, paused seats, backupify health, m365 backup failing, seat audit, or license new users for backup.
The two questions an MSP asks of SaaS Protection every week are "is everyone who should be protected actually protected?" and "are the backups for protected seats succeeding?". Both are answered from read tools; only the remediation step writes.
1. `datto_saas_list_domains` — every customer, with `saasCustomerId`, `externalSubscriptionId` and `seatsUsed`. Use `search` to narrow to one customer. 2. For each customer, `datto_saas_list_seats` with `seatState: "Unprotected"`, then again with `seatState: "Paused"`. 3. Group the results by `seatType` (`User`, `SharedMailbox`, `SharedDrive`, `Site`, `TeamSite`, `Team`). Unprotected `User` seats are usually the finding that matters; unprotected `Site` or `Team` seats are often deliberate. 4. Report per customer: protected count, unprotected count by type, paused count. Flag paused seats separately: they keep old backups but take no new ones.
If a seat read fails, retry it once. If it still fails, mark that customer's result as incomplete and say which read failed; never present a partial sweep as complete.
To inspect one person, call `datto_saas_get_seat` with `seatId` set to their email (the `mainId`) or `remoteId`, plus `saasCustomerId` (pick the customer if prompted). It returns the seat card:
{ "saasCustomerId": 123456, "seatId": "jane.doe@contoso.example" }1. `datto_saas_list_applications` for the customer (`daysUntil: 7` for a weekly review) — backup status per suite (Exchange, OneDrive, SharePoint, Teams, Gmail, Drive) per window. 2. `datto_saas_get_backup_stats` for the same customer — per-service last-7-day status, last backup times and storage. 3. A suite whose recent windows are failing, or whose last backup is older than a day, is the finding. Name the suite and the last good backup time. 4. If `datto_saas_list_applications` or `datto_saas_get_backup_stats` fails for a customer, retry once, then mark that customer's backup health as unknown in the report rather than leaving it out.
Licensing a seat starts protection **and billing**, so it is always a proposal first:
1. Build the exact list: customer, `externalSubscriptionId`, one `seatType`, the `remoteId` values (at most 100 per call), and the action (`License`, `Pause` or `Unlicense`). 2. Show it to the user and state the billing effect. 3. Only after explicit approval, call `datto_saas_bulk_seat_change`. The server asks for confirmation itself; on clients that cannot prompt, pass `confirm: true` only for the change the user approved.
Never chain a sweep straight into a bulk change, and never `Unlicense` a seat to "clean up" without the user naming it: unlicensed seats stop being protected.
One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: wyre-ai.github.io/msp-claude-plugins
Periodic hygiene review of a client's 1Password account for QBRs and license true-ups: reconciling active and suspended seats…
1Password MCP fundamentals through Conduit: the region plus two independent credential halves (Events Reporting token, Users API…
How to review a departing or departed user's 1Password footprint with the read-only tools: confirm the seat is suspended, find…
Triage of 1Password sign-in attempts for one client account: pulling the sign-in feed over a window, grouping failures by user,…
3CX's live-operations surface: read-only visibility into active calls, recordings, voicemail, department and queue membership,…
3CX's read-only directory surface: resolving a caller by email or by exact extension, searching the PBX's own phonebooks,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.