From maintainx-pack
Manages MaintainX work orders: create, update status through full lifecycle (OPEN to CLOSED), query via TypeScript client. For maintenance ops API automation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/maintainx-pack:maintainx-core-workflow-aThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Master the complete work order lifecycle in MaintainX -- from creation through completion. Work orders are the core unit of maintenance operations.
Master the complete work order lifecycle in MaintainX -- from creation through completion. Work orders are the core unit of maintenance operations.
maintainx-install-auth setupMAINTAINX_API_KEY environment variable configuredOPEN ──→ IN_PROGRESS ──→ COMPLETED ──→ CLOSED
│ │ ↑
│ ↓ │
│ ON_HOLD ───────────┘
│
└──→ CLOSED (cancelled)
import { MaintainXClient } from './maintainx/client';
const client = new MaintainXClient();
// Create a corrective work order
const { data: wo } = await client.createWorkOrder({
title: 'Pump Station #3 - Seal Leak Repair',
description: 'Detected water leak at the mechanical seal. Needs immediate attention.',
priority: 'HIGH',
status: 'OPEN',
assignees: [{ type: 'USER', id: 4521 }],
assetId: 8901,
locationId: 2345,
dueDate: '2026-03-21T17:00:00Z',
categories: ['CORRECTIVE'],
});
console.log(`Work order #${wo.id} created`);
// Technician starts work
await client.updateWorkOrder(wo.id, {
status: 'IN_PROGRESS',
});
// Put on hold (waiting for parts)
await client.updateWorkOrder(wo.id, {
status: 'ON_HOLD',
onHoldReason: 'Waiting for replacement seal kit from supplier',
});
// Resume and complete
await client.updateWorkOrder(wo.id, {
status: 'IN_PROGRESS',
});
await client.updateWorkOrder(wo.id, {
status: 'COMPLETED',
completionNotes: 'Replaced mechanical seal. Tested for 30 min with no leaks.',
});
// Fetch open work orders sorted by priority
const { data: openOrders } = await client.getWorkOrders({
status: 'OPEN',
limit: 25,
});
for (const order of openOrders.workOrders) {
console.log(`#${order.id} [${order.priority}] ${order.title}`);
}
// Paginate through all IN_PROGRESS orders
async function getAllInProgress() {
const allOrders = [];
let cursor: string | undefined;
do {
const { data } = await client.getWorkOrders({
status: 'IN_PROGRESS',
limit: 100,
cursor,
});
allOrders.push(...data.workOrders);
cursor = data.cursor;
} while (cursor);
return allOrders;
}
// Add a technician note
await client.request('POST', `/workorders/${wo.id}/comments`, {
body: 'Arrived on site. Isolating pump before disassembly.',
});
// Add a completion photo (URL-based)
await client.request('POST', `/workorders/${wo.id}/files`, {
url: 'https://storage.example.com/photos/seal-repair-complete.jpg',
name: 'seal-repair-complete.jpg',
});
// Assign to a team instead of individual
const { data: teams } = await client.request('GET', '/teams');
const mechTeam = teams.teams.find((t: any) => t.name === 'Mechanical');
await client.updateWorkOrder(wo.id, {
assignees: [{ type: 'TEAM', id: mechTeam.id }],
});
| Error | Cause | Solution |
|---|---|---|
| 400 Bad Request | Missing title field | Include at least title in POST body |
| 404 Not Found | Invalid asset/location/user ID | Verify referenced IDs exist via GET endpoints |
| 403 Forbidden | Insufficient permissions | Check user role has work order write access |
| 422 Invalid transition | Invalid status change (e.g., CLOSED to OPEN) | Follow the status transition flow above |
For asset and location management, see maintainx-core-workflow-b.
Bulk-create preventive maintenance work orders:
const pmSchedule = [
{ title: 'Weekly HVAC Filter Check', priority: 'LOW', categories: ['PREVENTIVE'] },
{ title: 'Monthly Fire Extinguisher Inspection', priority: 'MEDIUM', categories: ['PREVENTIVE'] },
{ title: 'Quarterly Elevator Safety Audit', priority: 'HIGH', categories: ['PREVENTIVE'] },
];
for (const pm of pmSchedule) {
const { data } = await client.createWorkOrder(pm);
console.log(`PM created: #${data.id} - ${data.title}`);
}
Filter work orders by date range:
curl -s "https://api.getmaintainx.com/v1/workorders?createdAtGte=2026-03-01T00:00:00Z&createdAtLte=2026-03-31T23:59:59Z&limit=50" \
-H "Authorization: Bearer $MAINTAINX_API_KEY" | jq '.workOrders | length'
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin maintainx-packCreates minimal MaintainX work order via REST API using curl or TypeScript/Node.js. Tests API key/setup and teaches basic patterns for new integrations.
Automates Maintainx operations via Composio toolkit through Rube MCP. Discovers tool schemas, manages connections, and executes workflows.
Classifies work order urgency from free-text descriptions, assigns priority (P1-P4) with SLA deadlines, estimates cost, checks lease responsibility, and routes to approval path.