Skip to main content
maintainx-core-workflow-b Execute MaintainX secondary workflow: Asset and Location management.
Use when managing equipment assets, organizing locations/facilities,
building asset hierarchies, and tracking equipment maintenance history.
Trigger with phrases like "maintainx asset", "maintainx location",
"equipment tracking", "asset management", "facility hierarchy".
跳到安装 Skills Marketplace 发现并探索由社区构建的 Agent Skills
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/jeremylongshore/claude-code-plugins-plus-skills --skill maintainx-core-workflow-b命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
下载 Zip 下载中... jeremylongshore
jeremylongshore/claude-code-plugins-plus-skills
打开 GitHub 仓库 name maintainx-core-workflow-b description Execute MaintainX secondary workflow: Asset and Location management.
Use when managing equipment assets, organizing locations/facilities,
building asset hierarchies, and tracking equipment maintenance history.
Trigger with phrases like "maintainx asset", "maintainx location",
"equipment tracking", "asset management", "facility hierarchy".
allowed-tools Read, Write, Edit, Bash(npm:*), Bash(curl:*), Grep version 1.11.0 license MIT author Jeremy Longshore <jeremy@intentsolutions.io> tags ["saas","maintainx","workflow"] compatibility Designed for Claude Code, also compatible with Codex and OpenClaw
MaintainX Core Workflow B: Asset & Location Management
Overview
Manage equipment assets and facility locations in MaintainX. Assets represent equipment that requires maintenance; locations organize your facilities into a manageable hierarchy.
Prerequisites
Completed maintainx-install-auth setup
MAINTAINX_API_KEY environment variable configured
MaintainX account with asset management permissions
Instructions
Step 1: Create a Location Hierarchy
import { MaintainXClient } from './maintainx/client' ;
const client = new MaintainXClient ();
const { data : plant } = await client.request ('POST' , '/locations' , {
name : 'Manufacturing Plant - Austin' ,
description : 'Main production facility' ,
address : '1234 Industrial Blvd, Austin, TX 78701' ,
});
const { data : floor } = await client.request ('POST' , '/locations' , {
name : 'Production Floor - Building A' ,
parentId : plant.id ,
description : 'Primary manufacturing area with 12 production lines' ,
});
const { data : mechRoom } = await client.request ('POST' , , {
: ,
: plant. ,
: ,
});
. ( );
'/locations'
name
'Mechanical Room - B2'
parentId
id
description
'Pumps, compressors, and HVAC equipment'
console
log
`Location hierarchy created: ${plant.id} → ${floor.id} , ${mechRoom.id} `
Step 2: Register Assets
const { data : pump } = await client.request ('POST' , '/assets' , {
name : 'Centrifugal Pump #3' ,
description : 'Grundfos CR 45-2, 15HP, installed 2023' ,
locationId : mechRoom.id ,
serialNumber : 'GF-CR45-2-00891' ,
model : 'CR 45-2' ,
manufacturer : 'Grundfos' ,
});
const { data : conveyor } = await client.request ('POST' , '/assets' , {
name : 'Conveyor Belt - Line 7' ,
description : 'Main assembly line conveyor, 120ft span' ,
locationId : floor.id ,
serialNumber : 'DRV-CONV-7-2024' ,
model : 'Heavy Duty BD-120' ,
manufacturer : 'Dorner' ,
});
console .log (`Assets registered: Pump #${pump.id} , Conveyor #${conveyor.id} ` );
Step 3: List and Filter Assets
const { data : locationAssets } = await client.getAssets ({
locationId : mechRoom.id ,
limit : 50 ,
});
for (const asset of locationAssets.assets ) {
console .log (` ${asset.name} (SN: ${asset.serialNumber || 'N/A' } )` );
}
async function getAllAssets ( ) {
const all = [];
let cursor : string | undefined ;
do {
const { data } = await client.getAssets ({ limit : 100 , cursor });
all.push (...data.assets );
cursor = data.cursor ;
} while (cursor);
return all;
}
const allAssets = await getAllAssets ();
console .log (`Total assets: ${allAssets.length} ` );
Step 4: Query Locations
const { data : locations } = await client.getLocations ({ limit : 100 });
function buildTree (locations : any [] ) {
const map = new Map ();
const roots : any [] = [];
for (const loc of locations) {
map.set (loc.id , { ...loc, children : [] });
}
for (const loc of locations) {
const node = map.get (loc.id );
if (loc.parentId && map.has (loc.parentId )) {
map.get (loc.parentId ).children .push (node);
} else {
roots.push (node);
}
}
return roots;
}
const tree = buildTree (locations.locations );
console .log (JSON .stringify (tree, null , 2 ));
Step 5: Create Work Orders Linked to Assets
const { data : wo } = await client.createWorkOrder ({
title : 'Centrifugal Pump #3 - Bearing Noise' ,
description : 'Unusual grinding noise detected during morning inspection.' ,
priority : 'HIGH' ,
assetId : pump.id ,
locationId : mechRoom.id ,
categories : ['CORRECTIVE' ],
});
console .log (`Work order #${wo.id} linked to asset ${pump.id} ` );
Output
Location hierarchy created with parent-child relationships
Assets registered with serial numbers, models, and location links
Paginated asset and location queries
Work orders linked to specific assets and locations
Error Handling Error Cause Solution 404 Not Found Invalid asset or location ID Verify ID exists with a GET request first 400 Bad Request Missing name field Assets and locations require at least name 409 Conflict Duplicate serial number Use unique serial numbers per asset Empty results Wrong filter or no data Check query parameters, try without filters
Resources
Next Steps For troubleshooting common issues, see maintainx-common-errors.
Examples Bulk import assets from CSV :
import { parse } from 'csv-parse/sync' ;
import { readFileSync } from 'fs' ;
const csv = readFileSync ('assets.csv' , 'utf-8' );
const rows = parse (csv, { columns : true });
for (const row of rows) {
await client.request ('POST' , '/assets' , {
name : row.name ,
serialNumber : row.serial_number ,
locationId : parseInt (row.location_id ),
model : row.model ,
manufacturer : row.manufacturer ,
});
console .log (`Imported: ${row.name} ` );
}
Get maintenance history for an asset :
curl -s "https://api.getmaintainx.com/v1/workorders?assetId=98765&limit=50" \
-H "Authorization: Bearer $MAINTAINX_API_KEY " \
| jq '.workOrders[] | {id, title, status, completedAt}'