Skip to content
Development
Skill

/computers

ConnectWise Automate computer/endpoint management: computer identifiers (ComputerID, Name, ComputerGUID, MAC), status values, OS types, hardware/software inventory, disk, patch, and antivirus status, plus remote management operations.

From plugin
msp-claude-plugins
46200 skills146 agents200 commands4 MCP
Install
$ npx -y skills add wyre-technology/msp-claude-plugins --skill computers --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/computers

Context preview

The summary Claude sees to decide when to auto-load this skill.

ConnectWise Automate computer/endpoint management: computer identifiers (ComputerID, Name, ComputerGUID, MAC), status values, OS types, hardware/software inventory, disk, patch, and antivirus status, plus remote management operations.

SKILL.md

computers.SKILL.md
name: "ConnectWise Automate Computers"
description: >
  ConnectWise Automate computer/endpoint management: computer identifiers (ComputerID,
  Name, ComputerGUID, MAC), status values, OS types, hardware/software inventory, disk,
  patch, and antivirus status, plus remote management operations.
when_to_use: >-
  When listing, searching, managing, and monitoring devices. Use when: automate computer, automate
  endpoint, automate device, automate agent, computer status, computer lookup, managed computer,
  computer online, computer offline, computer inventory, computer patches, computer antivirus, or
  labtech computer.

ConnectWise Automate Computer Management

Overview

Computers are the core managed entities in ConnectWise Automate. Each computer represents an endpoint with the Automate agent installed - workstations, servers, or network devices. This skill covers computer identification, status monitoring, inventory, patch management, and antivirus status.

Anti-triggers

  • **Claude subagents** — "automate agent" here means the Automate

endpoint agent, never an AI subagent definition under `agents/*.md`.

  • **The PSA record of the same machine** — ConnectWise PSA holds a

parallel configuration record with its own ID; an Automate `ComputerID` is not a PSA `configuration/id`. Reach configurations through `connectwise-psa-api-patterns` (`/company/configurations`).

  • **Which automation to run and what it returned** — inventory, status and

health live here; finding the right script, validating its parameters and reading execution results are `connectwise-automate-scripts`.

  • **Another RMM's device list** — Datto RMM, NinjaOne and Atera all speak

of devices and endpoints; use `datto-rmm-devices`, `ninjaone-devices` or `atera-devices`.

Key Concepts

Computer Identifiers

Every computer has multiple identifiers:

| Identifier | Type | Description | Example | |------------|------|-------------|---------| | `ComputerID` | integer | Primary key, auto-incrementing | `12345` | | `Name` | string | Computer hostname | `ACME-DC01` | | `ComputerGUID` | string | Globally unique identifier | `a1b2c3d4-e5f6-7890-abcd-ef1234567890` | | `LastContact` | datetime | Last agent check-in time | `2024-02-15T10:30:00Z` | | `MAC` | string | Primary MAC address | `00:1A:2B:3C:4D:5E` |

Computer Status Values

| Status | Description | Business Impact | |--------|-------------|-----------------| | `Online` | Agent actively checking in | Normal operation | | `Offline` | No agent communication | May require attention | | `Degraded` | Agent checking in with issues | Performance concerns | | `Unknown` | Status undetermined | Check connectivity |

Operating System Types

| OS Type | Examples | |---------|----------| | `Windows Server` | 2016, 2019, 2022 | | `Windows Workstation` | Windows 10, Windows 11 | | `macOS` | Monterey, Ventura, Sonoma | | `Linux` | Ubuntu, CentOS, RHEL |

Field Reference

Computer objects expose roughly 30 fields covering identifiers, client/location association, status, network, OS, hardware, agent, and timestamp data, plus an `ExtraData` map for Extra Data Fields (EDFs). `ComputerInventory` objects cover drives, software, memory, network adapters, printers, services, and monitors.

See [references/fields.md](references/fields.md) for the complete `Computer` and `ComputerInventory` field reference.

API Patterns

All endpoints require `Authorization: Bearer {token}` (see the API Patterns skill for authentication and token management). Core calls:

  • List: `GET /cwa/api/v1/Computers?pageSize=250`
  • Get one: `GET /cwa/api/v1/Computers/{computerID}`
  • Filter: `GET /cwa/api/v1/Computers?condition=ClientID = 100&pageSize=250` (or

`Status = 'Online'`, `OS contains 'Windows Server'`, etc. - see the API Patterns skill for full OData filter syntax)

  • Sub-resources: `/Computers/{id}/Drives`, `/Computers/{id}/Software`,

`/Computers/{id}/Patches`, `/Computers/{id}/Antivirus`

See [references/api.md](references/api.md) for the complete endpoint catalog with example requests and responses.

Workflows

Computer Lookup by Hostname

async function findComputerByHostname(client, hostname) {
  const computers = await client.request(
    `/Computers?condition=Name contains '${hostname}'&pageSize=100`
  );

  if (computers.length === 0) {
    return { found: false, suggestions: [] };
  }

  if (computers.length === 1) {
    return { found: true, computer: computers[0] };
  }

  return {
    found: false,
    ambiguous: true,
    suggestions: computers.map(c => ({
      name: c.Name,
      id: c.ComputerID,
      client: c.Client?.Name,
      status: c.Status
    }))
  };
}

Computer Lookup by IP Address

async function findComputerByIP(client, ipAddress) {
  const computers = await client.request(
    `/Computers?condition=IPAddress = '${ipAddress}' or ExternalIP = '${ipAddress}'`
  );

  return computers[0] || null;
}

Offline Computer Report

async function getOfflineComputers(client, options = {}) {
  const { clientId, offlineMinutes = 30 } = options;

  let condition = "Status = 'Offline'";
  if (clientId) {
    condition += ` and ClientID = ${clientId}`;
  }

  const computers = await client.request(
    `/Computers?condition=${encodeURIComponent(condition)}&pageSize=500`
  );

  const now = new Date();

  return computers.map(computer => ({
    name: computer.Name,
    id: computer.ComputerID,
    client: computer.Client?.Name,
    location: computer.Location?.Name,
    lastContact: computer.LastContact,
    offlineMinutes: Math.floor(
      (now - new Date(computer.LastContact)) / 60000
    )
  }));
}

Disk Space Report

async function getLowDiskSpaceComputers(client, threshold = 10) {
  // Get all computers
  const computers = await client.request('/Computers?pageSize=500');
  const lowDiskComputers = [];

  for (const computer of computers) {
    const drives = await
Read more
Ships withmsp-claude-plugins

One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai

Get the whole plugin

Other skills on msp-claude-plugins.