From superops-ai
Query SuperOps.ai asset inventory, view details, run scripts, monitor patches, manage client/site associations. Covers statuses, software/disk usage, activity for MSP endpoint management.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin superopsThis skill uses the workspace's default tool permissions.
SuperOps.ai RMM provides comprehensive asset management capabilities. Assets represent managed endpoints (workstations, servers, network devices) with rich telemetry including hardware specs, software inventory, patch status, and activity history. This skill covers querying, managing, and automating actions on assets.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Reviews prose for communication issues impeding comprehension, outputs minimal fixes in a three-column table per Microsoft Writing Style Guide. Useful for 'review prose' or 'improve prose' requests.
SuperOps.ai RMM provides comprehensive asset management capabilities. Assets represent managed endpoints (workstations, servers, network devices) with rich telemetry including hardware specs, software inventory, patch status, and activity history. This skill covers querying, managing, and automating actions on assets.
| Status | Description | Indicator |
|---|---|---|
| Online | Agent connected and reporting | Green |
| Offline | Agent not responding | Red |
| Maintenance | In maintenance mode | Yellow |
| Platform | Description |
|---|---|
| Windows | Windows workstations and servers |
| macOS | Apple Mac computers |
| Linux | Linux distributions |
| Field | Type | Description |
|---|---|---|
assetId | ID | Unique identifier |
name | String | Computer/device name |
status | Enum | Online, Offline, Maintenance |
platform | Enum | Windows, macOS, Linux |
lastSeen | DateTime | Last check-in time |
agentVersion | String | RMM agent version |
| Field | Type | Description |
|---|---|---|
ipAddress | String | Primary IP address |
macAddress | String | MAC address |
publicIp | String | External IP |
hostname | String | Network hostname |
| Field | Type | Description |
|---|---|---|
manufacturer | String | Hardware manufacturer |
model | String | Device model |
serialNumber | String | Serial number |
processorName | String | CPU model |
processorCores | Int | CPU core count |
totalMemory | Long | RAM in bytes |
totalDiskSpace | Long | Total disk space |
freeDiskSpace | Long | Available disk space |
| Field | Type | Description |
|---|---|---|
osName | String | Operating system name |
osVersion | String | OS version |
osBuild | String | OS build number |
architecture | String | 32-bit or 64-bit |
| Field | Type | Description |
|---|---|---|
client | Client | Associated client |
site | Site | Associated site |
tags | [String] | Asset tags |
customFields | [CustomField] | Custom field values |
query getAssetList($input: ListInfoInput!) {
getAssetList(input: $input) {
assets {
assetId
name
status
platform
lastSeen
ipAddress
osName
osVersion
client {
accountId
name
}
site {
id
name
}
patchStatus {
pendingCount
installedCount
failedCount
}
}
listInfo {
totalCount
hasNextPage
endCursor
}
}
}
Variables - All Online Assets:
{
"input": {
"first": 100,
"filter": {
"status": "Online"
},
"orderBy": {
"field": "name",
"direction": "ASC"
}
}
}
Variables - Filter by Client and Platform:
{
"input": {
"first": 50,
"filter": {
"client": {
"accountId": "client-uuid"
},
"platform": "Windows",
"status": "Online"
}
}
}
query getAsset($input: AssetIdentifierInput!) {
getAsset(input: $input) {
assetId
name
status
platform
lastSeen
# Network
ipAddress
macAddress
publicIp
hostname
# Hardware
manufacturer
model
serialNumber
processorName
processorCores
totalMemory
# OS
osName
osVersion
osBuild
architecture
# Disk
totalDiskSpace
freeDiskSpace
# Associations
client {
accountId
name
}
site {
id
name
address
}
tags
customFields {
name
value
}
# Agent
agentVersion
agentInstallDate
}
}
Variables:
{
"input": {
"assetId": "asset-uuid-here"
}
}
query getAssetSoftwareList($input: AssetSoftwareListInput!) {
getAssetSoftwareList(input: $input) {
software {
name
version
publisher
installDate
size
}
listInfo {
totalCount
hasNextPage
endCursor
}
}
}
Variables:
{
"input": {
"assetId": "asset-uuid",
"first": 100,
"filter": {
"name": "Microsoft"
}
}
}
query getAssetDiskDetails($input: AssetIdentifierInput!) {
getAssetDiskDetails(input: $input) {
disks {
driveLetter
volumeName
fileSystem
totalSpace
freeSpace
usedPercentage
}
}
}
query getAssetPatchDetails($input: AssetPatchInput!) {
getAssetPatchDetails(input: $input) {
patches {
patchId
title
severity
status
releaseDate
kbNumber
category
}
summary {
pendingCount
installedCount
failedCount
lastScanDate
}
}
}
Variables:
{
"input": {
"assetId": "asset-uuid",
"filter": {
"status": "Pending",
"severity": ["Critical", "Important"]
}
}
}
query getAssetActivity($input: AssetActivityInput!) {
getAssetActivity(input: $input) {
activities {
activityId
type
description
timestamp
performedBy {
id
name
}
result
}
listInfo {
totalCount
hasNextPage
}
}
}
mutation runScriptOnAsset($input: RunScriptInput!) {
runScriptOnAsset(input: $input) {
actionConfigId
script {
scriptId
name
}
arguments {
name
value
}
status
scheduledTime
}
}
Variables:
{
"input": {
"assetId": "asset-uuid",
"scriptId": "script-uuid",
"arguments": [
{
"name": "param1",
"value": "value1"
}
],
"runAs": "System",
"priority": "Normal"
}
}
mutation runScriptOnAssets($input: RunScriptOnAssetsInput!) {
runScriptOnAssets(input: $input) {
batchId
assetsCount
status
scheduledTime
}
}
Variables:
{
"input": {
"assetIds": ["asset-1", "asset-2", "asset-3"],
"scriptId": "script-uuid",
"runAs": "System"
}
}
# Query assets with low disk space
query getLowDiskAssets($input: ListInfoInput!) {
getAssetList(input: $input) {
assets {
assetId
name
freeDiskSpace
totalDiskSpace
client { name }
}
}
}
Variables:
{
"input": {
"filter": {
"status": "Online",
"diskSpacePercentFree": {
"lt": 10
}
}
}
}
query getPatchCompliance($input: ListInfoInput!) {
getAssetList(input: $input) {
assets {
assetId
name
client { name }
patchStatus {
pendingCount
installedCount
failedCount
lastScanDate
}
}
}
}
Variables:
{
"input": {
"filter": {
"patchStatus": {
"hasPending": true,
"severity": ["Critical"]
}
}
}
}
# Find assets with specific software
query findAssetsWithSoftware($input: ListInfoInput!) {
getAssetList(input: $input) {
assets {
assetId
name
client { name }
}
}
}
Variables:
{
"input": {
"filter": {
"software": {
"name": "TeamViewer"
}
}
}
}
| Error | Cause | Resolution |
|---|---|---|
| Asset not found | Invalid asset ID | Verify asset exists |
| Asset offline | Agent not responding | Check network connectivity |
| Script failed | Execution error | Check script logs |
| Permission denied | Insufficient access | Check user permissions |
| Rate limit exceeded | Over 800 req/min | Implement backoff |
// Check if asset is available for remote actions
function canRunRemoteAction(asset) {
if (asset.status !== 'Online') {
return {
canRun: false,
reason: `Asset is ${asset.status}. Last seen: ${asset.lastSeen}`
};
}
const lastSeenMinutes = (Date.now() - new Date(asset.lastSeen)) / 60000;
if (lastSeenMinutes > 5) {
return {
canRun: false,
reason: `Asset hasn't checked in for ${Math.round(lastSeenMinutes)} minutes`
};
}
return { canRun: true };
}