Integration

MaintainX integration

MaintainX is a maintenance management (CMMS) platform. An agent can create, update and track work orders and work requests, manage assets, locations, spare parts, vendors, purchase orders, meters and readings, preventive maintenance plans, procedures (checklists), teams and users, message users, and register webhooks. File attachment and thumbnail uploads, the webhook secret route, work request portals, custom asset statuses and rotation schedules are not exposed. API access needs a Premium or Enterprise plan; authentication is an API key (Settings, Integrations, API Keys) sent as a Bearer token.

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in MaintainX.Built from the 149 MaintainX tools below, on the connection you add once.

What you can do with MaintainX

Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.

Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.

Work order, 8 operations

  • create_work_orderCreate work orderPOSTCreate a work order (title required) with asset, location, assignees, priority, due date, categories, procedure and parts, and return its id.
  • delete_work_orderDelete work orderDELETEDelete a work order by id.
  • delete_work_order_by_external_idDelete work order by external idDELETEDelete a work order by the external ID your system gave it.
  • get_work_orderGet work orderGETGet one work order by id (or by its number with useSequentialId): status, priority, dates, asset, location, assignees, categories, parts and procedure.
  • get_work_order_by_external_idGet work order by external idGETGet one work order by the external ID your system gave it, with the same fields as get_work_order.
  • list_sub_work_ordersList sub work ordersGETList the sub work orders of a parent work order (status, title, dates, assignees). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).
  • list_work_ordersList work ordersGETList work orders with status, priority, dates, location and assignees; filter by title, asset, location, part, vendor, assignee, team, category, priority, status or dates. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).
  • send_work_order_emailSend work order emailPOSTEmail a work order right away to the given addresses, with an optional message and export options (comments, costs, images, history).

Asset, 7 operations

  • create_assetCreate assetPOSTCreate an asset (a piece of equipment) and return its id. Only name is required; link it to a location, parent asset, teams, vendors or criticality by id.
  • delete_assetDelete assetDELETEDelete an asset by id.
  • delete_asset_by_external_idDelete asset by external idDELETEDelete an asset by the external ID your system gave it.
  • get_assetGet assetGETGet one asset by id: name, description, location, parent and children, criticality, serial number, barcode, teams, vendors, custom fields, attachments and depreciation.
  • get_asset_by_external_idGet asset by external idGETGet one asset by the external ID your system gave it (externalId), with the same fields as get_asset.
  • list_assetsList assetsGETList assets (equipment) with location, criticality, serial number, teams, vendors and custom fields; filter by location, manufacturer, model or created and updated dates. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).
  • update_assetUpdate assetPATCHUpdate an asset by id and return it. Send only the fields to change; leave the others out to keep them.

Location, 6 operations

  • create_locationCreate locationPOSTCreate a location and return its id. Only name is required; nest it under another location with parentId.
  • delete_locationDelete locationDELETEDelete a location by id.
  • delete_location_by_external_idDelete location by external idDELETEDelete a location by the external ID your system gave it.
  • get_locationGet locationGETGet one location by id: name, description, address, barcode, parent and children, teams, vendors, custom fields and attachments.
  • get_location_by_external_idGet location by external idGETGet one location by the external ID your system gave it, with the same fields as get_location.
  • list_locationsList locationsGETList locations (sites, buildings, rooms) with address, parent, teams, vendors and custom fields; filter by name. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Part, 6 operations

  • create_partCreate partPOSTCreate a spare part (inventory item) and return its id. Only name is required; unitCost is in cents.
  • delete_partDelete partDELETEDelete a part by id.
  • delete_part_by_external_idDelete part by external idDELETEDelete a part by the external ID your system gave it.
  • get_partGet partGETGet one part by id: quantities (available, minimum, ordered, reserved), unit cost, locations, vendors, assets, teams and custom fields.
  • get_part_by_external_idGet part by external idGETGet one part by the external ID your system gave it, with the same fields as get_part.
  • list_partsList partsGETList spare parts (inventory) with quantities, unit cost, locations, vendors and custom fields; filter by part number or created and updated dates. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Purchase order, 6 operations

  • create_purchase_orderCreate purchase orderPOSTCreate a purchase order for a vendor with its line items (vendorId and items required) and return it.
  • delete_purchase_orderDelete purchase orderDELETEDelete a purchase order by id.
  • fulfill_purchase_orderFulfill purchase orderPATCHRecord received quantities on a purchase order's line items (fulfillment) and return the purchase order.
  • get_purchase_orderGet purchase orderGETGet one purchase order by id: status, vendor, line items with quantities and costs, addresses, due date, approval and custom fields.
  • list_purchase_ordersList purchase ordersGETList purchase orders (id, status, dates); filter by statuses or created and updated dates. Get details with get_purchase_order. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).
  • send_purchase_order_emailSend purchase order emailPOSTEmail a purchase order right away to the given addresses (and CC). The email goes out as soon as this runs.

Work request, 6 operations

  • create_work_requestCreate work requestPOSTCreate a work request (a maintenance request awaiting approval) from a title, with optional description, priority, asset, location and approver team. Returns its id.
  • delete_work_requestDelete work requestDELETEDelete a work request by id.
  • delete_work_request_by_external_idDelete work request by external idDELETEDelete a work request by the external ID your system gave it.
  • get_work_requestGet work requestGETGet one work request by id: title, description, priority, status, asset, location, approver team and resulting work order.
  • get_work_request_by_external_idGet work request by external idGETGet one work request by the external ID your system gave it, with the same fields as get_work_request.
  • list_work_requestsList work requestsGETList work requests (title, priority, status, asset, location, resulting work order); filter by title, assets, locations, priorities, statuses. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Category, 4 operations

  • create_categoryCreate categoryPOSTCreate a work order category from a label (and optional description) and return its id.
  • delete_categoryDelete categoryDELETEDelete a work order category by id.
  • get_categoryGet categoryGETGet one work order category by id, with its label, description and the number of work orders using it.
  • list_categoriesList categoriesGETList work order categories (id, label, description). Use a label or id in a work order's categories. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Maintenance plan, 4 operations

  • create_maintenance_planCreate maintenance planPOSTCreate a preventive maintenance plan that generates work orders on a calendar or meter schedule. Needs name, recurrence, planningHorizon and a workOrderBlueprintId from create_work_order_blueprint.
  • delete_maintenance_planDelete maintenance planDELETEDelete a maintenance plan by id. It stops generating work orders.
  • get_maintenance_planGet maintenance planGETGet one maintenance plan by id: trigger type, recurrence, meter settings, blueprint, assets, intervals and next scheduled due date.
  • list_maintenance_plansList maintenance plansGETList preventive maintenance plans with their trigger (calendar or meter), recurrence, blueprint, assets and next due dates. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Meter, 4 operations

  • create_meterCreate meterPOSTCreate a meter on an asset or location and return its id. name and unit are required; measurementType (MANUAL by default) changes how readings behave.
  • delete_meterDelete meterDELETEDelete a meter by id.
  • get_meterGet meterGETGet one meter by id: name, unit, measurement type, reading frequency, asset, location and last reading.
  • list_metersList metersGETList meters (name, unit, measurement type, asset, location, last reading); filter by measurementType or asset ids. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Meter trigger, 4 operations

  • create_meter_triggerCreate meter triggerPOSTCreate a meter trigger that opens a work order when a meter reading meets a condition, with the work order template to generate. Returns its id.
  • delete_meter_triggerDelete meter triggerDELETEDelete a meter trigger by id. It stops generating work orders.
  • get_meter_triggerGet meter triggerGETGet one meter trigger by id: condition, amount, next trigger value, state and its work order template.
  • list_meter_triggersList meter triggersGETList meter triggers (id, name, meter id); filter by meter ids. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Procedure template, 4 operations

  • create_procedure_templateCreate procedure templatePOSTCreate a procedure template (a checklist) from a title and its fields (rows) and return it.
  • delete_procedure_templateDelete procedure templateDELETEDelete a procedure template by id.
  • get_procedure_templateGet procedure templateGETGet one procedure template by id with its rows (label, type, choices, meter).
  • list_procedure_templatesList procedure templatesGETList procedure templates (checklists) with id, title and rows. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Team, 4 operations

  • create_teamCreate teamPOSTCreate a team from a name (optional description, members, assets and locations by id) and return its id.
  • delete_teamDelete teamDELETEDelete a team by id.
  • get_teamGet teamGETGet one team by id: name, description, member count, asset and location ids.
  • list_teamsList teamsGETList teams (id, name). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

User, 4 operations

  • create_userCreate userPOSTAdd a user to the organization (firstName, lastName, role, email or phone) and return the id. inviteType decides whether MaintainX sends an email or SMS invitation.
  • get_userGet userGETGet one user by id: names, role, email, phone, auth type, hourly rate, custom fields and whether they were removed from the organization.
  • list_usersList usersGETList users of the organization (names, email, phone, role, hourly rate, last visit); filter by email or onlyAssignable. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).
  • remove_userRemove userDELETERemove a user from the organization by id. They lose access to it.

Vendor, 4 operations

  • create_vendorCreate vendorPOSTCreate a vendor from a name (optional description, emails, phone numbers, custom fields) and return its id.
  • delete_vendorDelete vendorDELETEDelete a vendor by id.
  • get_vendorGet vendorGETGet one vendor by id: name, emails, phone numbers, description, contact ids, custom fields and attachments.
  • list_vendorsList vendorsGETList vendors (suppliers, contractors) with id, name and custom fields. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Vendor contact, 4 operations

  • create_vendor_contactCreate vendor contactPOSTAdd a contact person to a vendor (name required, role, email, phone, extension) and return it.
  • delete_vendor_contactDelete vendor contactDELETEDelete a contact of a vendor by id.
  • get_vendor_contactGet vendor contactGETGet one contact of a vendor by id (name, role, email, phone, extension).
  • list_vendor_contactsList vendor contactsGETList the contacts of a vendor (name, role, email, phone, extension). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Asset status, 3 operations

  • create_asset_statusCreate asset statusPOSTRecord a status change on an asset (ONLINE, OFFLINE or IGNORE, optionally a custom status and a downtime type PLANNED or UNPLANNED) and return the new status entry.
  • list_asset_statusesList asset statusesGETList asset status history entries (status, downtime type, start and end dates); filter by assetId. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).
  • update_asset_statusUpdate asset statusPATCHUpdate an asset status entry by id (status, custom status, downtime type, dates, description) and return it. Send only the fields to change.

Custom field, 3 operations

  • create_custom_fieldsCreate custom fieldsPOSTCreate one or more custom field definitions on an entity type. Each field needs a label and a type (oneline, multiline, number, singleSelect, date, datetime, link).
  • delete_custom_fieldDelete custom fieldDELETEDelete one custom field definition of an entity type, by id. Get ids from list_custom_fields.
  • list_custom_fieldsList custom fieldsGETList the custom field definitions of one entity type (assets, locations, parts, workOrders, vendors, purchaseOrders, lineItemPurchaseOrders): label, type, options, required.

Customer, 3 operations

  • create_customerCreate customerPOSTCreate a customer from a name (optional description and custom fields) and return its id.
  • get_customerGet customerGETGet one customer by id: name, description, custom fields, archived, created and updated dates.
  • list_customersList customersGETList customers (id, name, description, custom fields, archived date). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Manufacturer, 3 operations

  • create_manufacturerCreate manufacturerPOSTCreate a manufacturer from a name and return its id. Models are created with create_model.
  • get_manufacturerGet manufacturerGETGet one manufacturer by id (id, name).
  • list_manufacturersList manufacturersGETList equipment manufacturers (id, name). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Model, 3 operations

  • create_modelCreate modelPOSTCreate an equipment model for a manufacturer (name, manufacturerId from list_manufacturers) and return its id.
  • get_modelGet modelGETGet one equipment model by id (id, name, manufacturerId).
  • list_modelsList modelsGETList equipment models (id, name, manufacturerId). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Part transfer request, 3 operations

  • create_part_transfer_requestCreate part transfer requestPOSTAsk another organization to send stock: quantityRequested of sourcePartId (theirs) into destinationPartId (yours). Returns the request id.
  • get_part_transfer_requestGet part transfer requestGETGet one part transfer request by id: quantities requested, transferred and received, status, messages and locations.
  • list_part_transfer_requestsList part transfer requestsGETList part transfer requests between organizations (quantities, status, source and destination parts); filter by statuses. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Team member, 3 operations

  • add_team_memberAdd team memberPOSTAdd an existing user to a team as ADMIN or MEMBER. Get user ids from list_users and team ids from list_teams. Returns the added user's global id.
  • list_team_membersList team membersGETList the members of a team (user id, names, team role ADMIN or MEMBER). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).
  • remove_team_memberRemove team memberDELETERemove a user from a team. The user stays in the organization.

Webhook subscription, 3 operations

  • create_webhook_subscriptionCreate webhook subscriptionPOSTSubscribe a URL to one MaintainX event type and return the id and status (VALID, or PENDING_APPROVAL: ask MaintainX support before use). The signing secret is withheld from this tool's output.
  • delete_webhook_subscriptionDelete webhook subscriptionDELETERemove a webhook subscription by id. Deliveries stop.
  • get_webhook_subscriptionGet webhook subscriptionGETGet one webhook subscription by id: event type, URL and status.

Asset criticality, 2 operations

  • get_asset_criticalityGet asset criticalityGETGet one asset criticality level by id (id, label, level).
  • list_asset_criticalitiesList asset criticalitiesGETList the organization's asset criticality levels (id, label, level); filter by label or level. Use an id as criticalityId on an asset. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Meter reading, 2 operations

  • create_meter_readingsCreate meter readingsPOSTRecord up to 100 meter readings in one call (meterId, value, optional readingDate). Limits: automated and IoT readings 100 requests per 60 s, manual readings 10 requests per 24 h.
  • get_meter_readingGet meter readingGETGet one meter reading by id: value, meter id, reading date and creation date.

Root cause analysis report, 2 operations

  • get_root_cause_analysis_reportGet root cause analysis reportGETGet one root cause analysis report by id: main asset and status, incident timing, repair time, notes, problems and related work orders.
  • list_root_cause_analysis_reportsList root cause analysis reportsGETList root cause analysis reports (status, main asset, incident dates and duration, repair time, problems); filter by assets, statuses, creators, dates. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Work order comment, 2 operations

  • create_work_order_commentCreate work order commentPOSTPost a comment on a work order and return its id.
  • list_work_order_commentsList work order commentsGETList the comments of a work order (author id, content, date). Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Work order cost, 2 operations

  • create_work_order_costCreate work order costPOSTAdd a cost to a work order. EXPENSE: costType LABOR, OTHER or TRAVEL plus costPerUnit in cents. TIME: costType INSPECTION, OTHER or WORK plus durationTotal in seconds.
  • list_work_order_costsList work order costsGETGet the costs of a work order: the total and each row (time, parts and expenses, in cents).

Conversation, 1 operation

  • list_conversationsList conversationsGETList the MaintainX conversations (chats) the API user can see, with id, type and name; onlyNamed keeps named group and team conversations. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Conversation member, 1 operation

  • list_conversation_membersList conversation membersGETList the members of a conversation (user id, first and last name). Get conversation ids from list_conversations. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Conversation message, 1 operation

  • send_conversation_messageSend conversation messagePOSTPost a message in a MaintainX conversation right away, visible to its members. Get conversation ids from list_conversations. Returns the message id.

Organization, 1 operation

  • list_organizationsList organizationsGETList the organizations the API key can access (id, name, time zone, currency). With a multi-organization key, pass an id as x-organization-id on other tools. Paged: pass nextCursor back as cursor; limit up to 200 (default 100).

Procedure template row, 1 operation

  • delete_procedure_template_rowDelete procedure template rowDELETEDelete one row (field) of a procedure template by id.

Purchase order comment, 1 operation

  • create_purchase_order_commentCreate purchase order commentPOSTPost a comment on a purchase order and return its id.

User message, 1 operation

  • send_user_messageSend user messagePOSTSend a direct message to a MaintainX user right away and return the conversation id.

Work order blueprint, 1 operation

  • create_work_order_blueprintCreate work order blueprintPOSTCreate a work order blueprint (title, description, procedures, assignees, priority, parts) that a maintenance plan uses to generate work orders. Returns its id.

Work order procedure, 1 operation

  • detach_work_order_procedureDetach work order procedureDELETEDetach the procedure (checklist) from a work order.

Work permit, 1 operation

  • sign_work_permitSign work permitPOSTSign a work permit through an External Link (externalLinkUuid and signerName). Returns the permit status and the work order it unblocks.

Work shift, 1 operation

  • set_work_shiftsSet work shiftsPOSTSet per-day work capacity for users (up to 250 entries of userId, date in UTC, seconds 0 to 86400, optional status). Re-sending a user and date overwrites it.

Showing the first 120 of 149 endpoints. The rest are in the product, searchable from the workflow builder and from chat.

Use MaintainX from Claude Code, Cursor or Codex

Connect MaintainX in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its MaintainX operations become tools the client can call, next to every other integration you connected.

Claude Code
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"
Codex (~/.codex/config.toml)
[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"

[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"
Cursor, Claude Desktop and other JSON configs
{
  "mcpServers": {
    "livecontext": {
      "type": "http",
      "url": "https://livecontext.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Set up the MCP server step by step

How to connect MaintainX

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect MaintainX once

    Add your MaintainX connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.

  3. Describe the job in chat

    The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.

MaintainX integration FAQ

What can you do with the MaintainX integration?

LiveContext exposes 149 operations on MaintainX, covering work order, asset, location and part.

Popular integrations

Browse the whole catalog