Integration

McMain integration

McMain is maintenance management (CMMS) software for technical services. Through its Open API an agent can create, update, assign, cancel and complete work orders, book hours, comment and attach images or documents, and manage service calls, assets, preventive maintenance models, meters and readings, inspections, stock items, purchase orders with their lines and goods receipts, part issues and requests, vendors, contacts, accounts, contracts, crews, employees, lendings, locations and stores. Authentication: an Open API bearer token for your McMain environment, sent as Authorization: Bearer (the reference does not say how a token is issued: ask McMain support). Calls go to the one host the reference documents, api-v1.cloud3.mcmain.online, so an environment on another McMain host is not reachable through this integration; the rate limit is 200 requests per 5 seconds per token. Lists return at most the first 1,000 records (the vendor pages further only through a request body the platform does not send on a read), so narrow them with the query filter or If-Modified-Since. Employee, contact and call records hold names, phone numbers and email addresses of real people (personal data); vendor bank account numbers are withheld. Some routes and fields need a McMain license or option, named in each tool. Left out: the detail reads of assets, items, meters, part issues, purchase orders, receipts, preventive maintenance models, store locations and work orders and the purchase order line listing (the vendor documents them as GET requests carrying a JSON body, which the platform does not send; the list tools return the main fields of those records, and purchase order lines are read one by one with get_purchase_order_line), the image download, the ping route and the undocumented creation of a work order from a maintenance model.

Ask it in chat

Say what should happen.
The workflow builds itself.

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

What you can do with McMain

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.

Each badge shows the default agent permission of an endpoint (allowed: an agent calls it without asking; ask first: you are asked before an agent calls it, when the agent or chat asks permission for sensitive actions; never: no agent may call it), which every user can change endpoint by endpoint in their credential settings.

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

Asset, 6 operations

  • activate_assetActivate assetPOSTAgents: ask firstSets an asset back to active in McMain. Pass the asset ID from list_assets.
  • change_asset_parentChange asset parentPOSTAgents: ask firstMoves an asset under another parent asset in the asset tree: newParent is required, originalParent names the current parent. Changes the tree in McMain.
  • create_assetCreate assetPOSTAgents: ask firstCreates an asset in McMain. Only description is required; parent, account, vendor, manufacturer, location, type, dates, price, serial, model and vehicle check dates are optional.
  • deactivate_assetDeactivate assetPOSTAgents: ask firstDeactivates an asset in McMain (the vendor's delete action deactivates the record). activate_asset makes it active again.
  • list_assetsList assetsGETAgents: ask firstLists assets with status, parent, type, location, account, vendor, manufacturer, serial, price, key dates and labels. At most 1,000 records; filter with query (eqNmr, eqParent, eqLoc, eqType...).
  • update_assetUpdate assetPOSTAgents: ask firstChanges fields of an asset (ID from list_assets): description, dates, vendor, type, location, account, managers, flags. Only the fields you set are sent.

Call, 6 operations

  • close_callClose callPOSTAgents: ask firstCloses a call in McMain (its status becomes closed). Pass the call ID from list_calls.
  • complete_callComplete callPOSTAgents: ask firstMarks a call as complete in McMain. Pass the call ID from list_calls.
  • create_callCreate callPOSTAgents: ask firstCreates a service call in McMain: name, call type and a reporter (name and email required) plus optional asset, urgency, location and dates. Stores the reporter's personal data.
  • get_callGet callPOSTAgents: ask firstReturns one call by ID (from list_calls): name, description, type, reporter with name, email and phone (personal data), coordinates, dates and log comments.
  • list_callsList callsGETAgents: ask firstLists service calls with name, status, urgency, type, asset, work order, dates and the reporter's name, email and phone (personal data). At most 1,000 records; filter with query.
  • update_callUpdate callPOSTAgents: ask firstChanges a call that is still in status requested: description, asset, account, caller name, phone and email, urgency, dates. Only the fields you set are sent.

Employee, 6 operations

  • activate_employeesActivate employeesPOSTAgents: ask firstReactivates one or more employees in McMain: employees is a list of objects that each carry an employee id.
  • create_employeeCreate employeePOSTAgents: ask firstCreates an employee (ID and full name required) with optional crew, department, vendor, phone, email, rate, planboard flag and weekly available hours. Stores personal data.
  • create_employeesCreate employeesPOSTAgents: ask firstCreates several employees in one call: employees is a list of objects with the fields of create_employee (id and name required in each). Stores personal data.
  • deactivate_employeeDeactivate employeePOSTAgents: ask firstDeactivates an employee (userCraft = employee ID). With a linked system user also send userId and userActive 0: that user, and a license it holds, are deactivated too.
  • get_employeeGet employeePOSTAgents: ask firstReturns one employee by ID: contact details, rate, function, employment dates, available hours, hour registrations, documents and qualifications (personal data).
  • list_employeesList employeesGETAgents: ask firstLists employees with name, crew, department, phone, mobile, email, rate, function and employment dates (personal data). At most 1,000 records; filter with query.

Work order, 6 operations

  • assign_work_orderAssign work orderPOSTAgents: ask firstAssigns a work order to an employee, optionally with a start date; blockPlanning (license WO131) locks its scheduling. Changes the work order in McMain.
  • cancel_work_orderCancel work orderPOSTAgents: ask firstCancels a work order in McMain. Pass the work order ID from list_work_orders.
  • complete_work_orderComplete work orderPOSTAgents: ask firstMarks a work order as complete in McMain. Pass the work order ID from list_work_orders.
  • create_work_orderCreate work orderPOSTAgents: ask firstCreates a work order. Required: description, typeId, faultId, priorityId, assetId and accountId (from list_work_order_types, list_fault_codes, list_priorities, list_assets, list_accounts).
  • list_work_ordersList work ordersGETAgents: ask firstLists work orders with status, asset, assignees, account, priority, type, fault, dates, hours and costs. At most 1,000 records; filter with query, e.g. woStat eq "4".
  • set_work_order_in_preparationSet work order in preparationPOSTAgents: ask firstSets a work order to the status In Preparation, with an optional reason code and comment.

Item, 5 operations

  • create_itemCreate itemPOSTAgents: ask firstCreates a stock item. Required: description, vendorId, externalOrderId, stockUnit, purchaseUnit and price. stockType is SI (stock item, the default), NSI or NPI.
  • create_item_from_assetCreate item from assetPOSTAgents: ask firstCreates a spare-part item from an asset: pass the asset ID, the vendor's part number (externalPartId) and the number of identical parts (partQuantity).
  • delete_itemDelete itemPOSTAgents: ask firstDeletes an item in McMain. Pass the item ID from list_items.
  • list_itemsList itemsGETAgents: ask firstLists stock items with stock, net unit price, reorder point, vendor, vendor order number, group, location and comment. At most 1,000 records; If-Modified-Since narrows it.
  • set_item_run_outSet item run outPOSTAgents: ask firstPuts an item in the Run Out status in McMain. Pass the item ID from list_items.

Vendor, 5 operations

  • create_vendorCreate vendorPOSTAgents: ask firstCreates a vendor (ID and description required) with addresses, customer number, VAT, chamber of commerce and bank account numbers, phone, email and website.
  • deactivate_vendorDeactivate vendorPOSTAgents: ask firstDeactivates a vendor in McMain; restore_vendor makes it active again.
  • get_vendorGet vendorPOSTAgents: ask firstReturns one vendor by ID: addresses, VAT and chamber of commerce numbers, phone, email, website, contacts (personal data), assets and documents. The bank account is withheld.
  • list_vendorsList vendorsGETAgents: ask firstLists vendors and contractors with status, description, contractor flag, address, financial reference and primary contact (name, phone, email: personal data). At most 1,000 records; filter with query.
  • restore_vendorRestore vendorPOSTAgents: ask firstRestores a deactivated vendor to active status in McMain.

Account, 4 operations

  • create_accountCreate accountPOSTAgents: ask firstCreates an account in McMain with the ID and description you give, plus an optional budget and financial contact. Answers 409 when the ID already exists.
  • get_accountGet accountPOSTAgents: ask firstReturns one account by ID (from list_accounts): status, description, budget, financial contact and its contacts with their IDs and last names (personal data).
  • list_accountsList accountsGETAgents: ask firstLists the accounts with ID, status, description, phone number and address. At most 1,000 records; If-Modified-Since returns only the ones changed since that time.
  • update_accountUpdate accountPOSTAgents: ask firstChanges the description, budget or financial contact of an account (ID from list_accounts). Only the fields you set are sent.

Asset type, 4 operations

  • create_asset_typeCreate asset typePOSTAgents: ask firstCreates an asset type with an ID and description (comments optional). Answers 409 when the ID already exists.
  • get_asset_typeGet asset typePOSTAgents: ask firstReturns one asset type by ID (from list_asset_types) with status, description, comments and the assets of that type (ID and description).
  • list_asset_typesList asset typesGETAgents: ask firstLists the asset types with ID, status, description and comments. At most 1,000 records; If-Modified-Since returns only the ones changed since that time.
  • update_asset_typeUpdate asset typePOSTAgents: ask firstChanges the description or comments of an asset type (ID from list_asset_types). Only the fields you set are sent.

Contact, 4 operations

  • create_contactCreate contactPOSTAgents: ask firstCreates a contact person (last name required; first name, initials, job title, phone, email, vendor, account optional). Stores personal data. The address cannot be set here.
  • get_contactGet contactPOSTAgents: ask firstReturns one contact person by ID: names, initials, job title, phone, email, vendor, account and address (personal data).
  • list_contactsList contactsGETAgents: ask firstLists contact persons with ID, status, last name, initials and vendor (personal data). At most 1,000 records; filter with query on conName, conEmail, conTel1...
  • update_contactUpdate contactPOSTAgents: ask firstChanges a contact person's names, job title, phone, email, vendor or account (ID from list_contacts). Only the fields you set are sent. The address cannot be set here.

Contract, 4 operations

  • create_contractCreate contractPOSTAgents: ask firstCreates a contract with a description and optional vendor, contact, start and end dates and total cost.
  • get_contractGet contractPOSTAgents: ask firstReturns one contract by ID (from list_contracts): status, description, vendor, contact, start and end dates, cost, attached documents and covered assets.
  • list_contractsList contractsGETAgents: ask firstLists contracts with ID, status, description, vendor and contact. At most 1,000 records.
  • update_contractUpdate contractPOSTAgents: ask firstChanges a contract's description, vendor, contact or dates (ID from list_contracts). Only the fields you set are sent. The cost cannot be changed here.

Crew, 4 operations

  • create_crewCreate crewPOSTAgents: ask firstCreates a crew with an ID and description, plus an optional rate and coordinator. Answers 409 when the ID already exists.
  • get_crewGet crewPOSTAgents: ask firstReturns one crew by ID (from list_crews) with status, description, rate and coordinator.
  • list_crewsList crewsGETAgents: ask firstLists the crews (groups of employees) with ID, status and description.
  • update_crewUpdate crewPOSTAgents: ask firstChanges a crew's description, rate or coordinator (ID from list_crews). Only the fields you set are sent.

Purchase order, 4 operations

  • activate_purchase_orderActivate purchase orderPOSTAgents: ask firstActivates a purchase order in McMain (changes its status). Pass the ID from list_purchase_orders.
  • create_purchase_orderCreate purchase orderPOSTAgents: ask firstCreates a purchase order (description required) with optional vendor, work order, purchaser, applicant, dates, delivery address, costs, VAT and references.
  • list_purchase_ordersList purchase ordersGETAgents: ask firstLists purchase orders with status, description, dates, vendor, goods, invoice and total cost, work order, project, account and references. At most 1,000 records.
  • open_purchase_orderOpen purchase orderPOSTAgents: ask firstOpens a purchase order in McMain (changes its status). Pass the ID from list_purchase_orders.

Document, 3 operations

  • get_documentGet documentPOSTAgents: ask firstReturns one document's metadata by ID: description, type, validity dates and term, file path, comments and the records it is connected to. Not the file itself.
  • list_documentsList documentsGETAgents: ask firstLists the documents stored in McMain with ID, description, type and date. At most 1,000 records.
  • update_documentUpdate documentPOSTAgents: ask firstChanges a document's description, validity dates, term value or comments. Only the fields you set are sent. Its type and term unit cannot be changed here.

Item group, 3 operations

  • create_item_groupCreate item groupPOSTAgents: ask firstCreates an item group with an ID and description (comments optional).
  • get_item_groupGet item groupPOSTAgents: ask firstReturns one item group by ID (from list_item_groups) with status, description and comments.
  • list_item_groupsList item groupsGETAgents: ask firstLists the item groups with ID, status, description and comments. At most 1,000 records; filter with query on pgNmr or pgDesc.

Job, 3 operations

  • create_jobCreate jobPOSTAgents: ask firstCreates a job with a description. Comments cannot be set here; add them afterwards with update_job.
  • get_jobGet jobPOSTAgents: ask firstReturns one job by ID (from list_jobs): description, comments, images, documents, inspection rows, the maintenance models that use it and its materials.
  • list_jobsList jobsGETAgents: ask firstLists the jobs with ID, description, status, document and inspection rows. At most 1,000 records; filter with query on jobNmr or jobDesc.

Lending, 3 operations

  • create_lendingCreate lendingPOSTAgents: ask firstCreates a lending in status 1 (open) for an account and requesting employee, with a lend date and lines of assets to lend. Needs license EQ130.
  • get_lendingGet lendingPOSTAgents: ask firstReturns one lending by lendingId with its lines (asset type, asset, location, dates and status).
  • list_lendingsList lendingsGETAgents: ask firstLists lendings with status, description, account, requester, contact, work order, reference and lend, planned and actual return dates. At most 1,000 records.

Location, 3 operations

  • create_locationCreate locationPOSTAgents: ask firstCreates an asset location with an ID and description, plus an optional address, city, zip code, country, GPS coordinates and comment.
  • list_locationsList locationsGETAgents: ask firstLists the asset locations with ID, status, description, address, house number, zip code, city, country, GPS coordinates and comment. At most 1,000 records.
  • remove_locationRemove locationPOSTAgents: ask firstPuts an asset location in the removed status in McMain. Pass the location ID from list_locations.

Measurement, 3 operations

  • create_measurementCreate measurementPOSTAgents: ask firstRecords a meter reading: meterId, date and value (time is also required from McMain 1.13.3). Writes a measurement in McMain.
  • get_measurementGet measurementPOSTAgents: ask firstReturns one meter reading by ID: date, value, status, previous reading, meter details and whether its limits were passed.
  • list_measurementsList measurementsGETAgents: ask firstLists meter readings with asset, meter, date, value, status and whether the meter's maximum or minimum was passed. At most 1,000 records; filter with query.

General ledger, 2 operations

  • create_general_ledgerCreate general ledgerPOSTAgents: ask firstCreates a general ledger account with an ID and description (comment optional). Needs McMain option BS100.
  • list_general_ledgersList general ledgersGETAgents: ask firstLists the general ledger accounts with ID, description and comment. Needs McMain option BS100.

Hour booking, 2 operations

  • list_booked_hoursList booked hoursGETAgents: ask firstLists booked hour records: employee, work order, account, hour type, week or date, hours and comments (personal data). At most 1,000 records; filter with query.
  • register_work_order_hoursRegister work order hoursPOSTAgents: ask firstBooks hours an employee worked on a work order on a given date; typeId is an hour type from list_hour_types. Writes a time registration in McMain.

Hour type, 2 operations

  • get_hour_typeGet hour typePOSTAgents: ask firstReturns one hour type by ID (from list_hour_types): description, tariff, type, planboard flag and color.
  • list_hour_typesList hour typesGETAgents: ask firstLists the hour types with ID, status, description and type. At most 1,000 records; filter with query on htNmr or htDesc.

Meter, 2 operations

  • create_meterCreate meterPOSTAgents: ask firstCreates a meter on an asset: id, equipmentId (asset), description and meterTypeId (UP, DN or ME) are required; unit, type, site, model and min/max values optional.
  • list_metersList metersGETAgents: ask firstLists meters with asset, type (UP upward, DN downward, ME measuring points), unit, maintenance model, next planned reading, activation reading and value limits.

Part issue, 2 operations

  • create_part_issueCreate part issuePOSTAgents: ask firstIssues stock items: lines lists itemId and quantity, against a work order or an account (one of them required; storeId with license MA100). Changes stock in McMain.
  • list_part_issuesList part issuesGETAgents: ask firstLists part issues with account, description, requester, site, transaction date and type, and work order. At most 1,000 records.

Preventive maintenance model, 2 operations

  • create_preventive_maintenance_modelCreate preventive maintenance modelPOSTAgents: ask firstCreates a preventive maintenance model for an asset: description, intervalValue, intervalType, priority and work order type are required; assignee, hours, weekdays optional.
  • list_preventive_maintenance_modelsList preventive maintenance modelsGETAgents: ask firstLists preventive maintenance models with asset, interval, priority, status, type, vendor, last completed and next planned dates and last generated work order. At most 1,000.

Purchase order line, 2 operations

  • create_purchase_order_lineCreate purchase order linePOSTAgents: ask firstAdds an item line to a purchase order: purchaseOrderId and itemId are required, with optional quantity, price, discount, vendor order ID and comment.
  • get_purchase_order_lineGet purchase order linePOSTAgents: ask firstReturns one purchase order line by ID: item, vendor, price, ordered, received and billed quantities, unit, position and references.

Receipt, 2 operations

  • create_receiptCreate receiptPOSTAgents: ask firstRegisters goods received on a purchase order: receiptDetails lists each line (rowId = purchase order line ID) with receivedQuantity and rowComplete. Writes a receipt.
  • list_receiptsList receiptsGETAgents: ask firstLists goods receipts with purchase order, vendor, account, receipt date and store. At most 1,000 records; filter with query on purchaseOrderId, vendorId, status...

Store, 2 operations

  • get_storeGet storePOSTAgents: ask firstReturns one store by ID (from list_stores): status, description, customer, default location, email, financial reference and address.
  • list_storesList storesGETAgents: ask firstLists the stores with ID, status, description, default location, email and financial reference. At most 1,000 records; filter with query on stoNmr.

Store location, 2 operations

  • create_store_locationCreate store locationPOSTAgents: ask firstCreates a storage location with an ID and description (store required with license MA100).
  • list_store_locationsList store locationsGETAgents: ask firstLists the storage locations with ID, description and store.

Asset image, 1 operation

  • add_asset_imagesAdd asset imagesPOSTAgents: ask firstUploads one or more images to an asset, each as a file name plus base64 content. Returns the new image IDs and stored paths.

Asset picture, 1 operation

  • set_asset_pictureSet asset picturePOSTAgents: ask firstReplaces the picture (bitmap) shown for an asset with one image given as a file name plus base64 content. Returns the stored file name.

Call comment, 1 operation

  • add_call_commentAdd call commentPOSTAgents: ask firstAdds a comment to the log of a call, with craft as its author. Writes to the call in McMain.

Call image, 1 operation

  • add_call_imagesAdd call imagesPOSTAgents: ask firstUploads one or more images to a call (file name plus base64 content, optional reference and useBitmap). Returns the new image IDs and paths.

Call type, 1 operation

  • list_call_typesList call typesGETAgents: ask firstLists the call types with ID, description and status. Pass an ID as type to create_call.

Contract document, 1 operation

  • add_contract_documentsAdd contract documentsPOSTAgents: ask firstUploads one or more documents to a contract, each as a file name plus base64 content. Returns the new document IDs and paths.

Department, 1 operation

  • list_departmentsList departmentsGETAgents: ask firstLists the departments with ID, description and status. Needs McMain license EQ005 (Team).

Fault code, 1 operation

  • list_fault_codesList fault codesGETAgents: ask firstLists the fault codes (causes) a work order can carry, with ID, description and status. Pass an ID as faultId to create_work_order.

Item stock, 1 operation

  • correct_item_stockCorrect item stockPOSTAgents: ask firstCorrects the stock of an item to the amount given in stock. storeId is needed with license MA100 and locationId with MA120. Changes stock in McMain.

Label, 1 operation

  • assign_labelsAssign labelsPOSTAgents: ask firstAssigns labels to a record (entityType WO, EQ, ART, PO, VEN, CALL, DOC, PM, PJ or PD) or updates the comment of a label it already has. Needs license BS001 (Team).

Lending hyperlink, 1 operation

  • add_lending_hyperlinkAdd lending hyperlinkPOSTAgents: ask firstAttaches a hyperlink (URL and a name) to a lending. Needs configuration option DO002 (Team).

Lending request, 1 operation

  • create_lending_requestCreate lending requestPOSTAgents: ask firstCreates a lending request in status A (requested) for an account and requesting employee, with a lend date and lines of asset types. Needs license EQ130.

Part request, 1 operation

  • create_part_requestCreate part requestPOSTAgents: ask firstRequests parts for a work order on behalf of an employee: prDetails lines with an item (or a description), quantity, account and ledger. Returns the request number.

Priority, 1 operation

  • list_prioritiesList prioritiesGETAgents: ask firstLists the priority levels with ID, description and status. Pass an ID as priorityId to create_work_order.

Project, 1 operation

  • get_projectGet projectPOSTAgents: ask firstReturns one project by ID with description, end date and comments.

Qualification, 1 operation

  • list_qualificationsList qualificationsGETAgents: ask firstLists the qualifications with ID, description, comments and status. They exist when configuration option CR032 (Team) is turned on.

Shift, 1 operation

  • list_shiftsList shiftsGETAgents: ask firstLists the work shifts with ID, description, status and comment.

Timesheet, 1 operation

  • list_timesheetsList timesheetsGETAgents: ask firstLists weekly timesheets per employee: week, status and hours per weekday with the total (personal data). At most 1,000 records; filter with query on week (2024/01), employee, hrStatus.

Work order comment, 1 operation

  • add_work_order_commentAdd work order commentPOSTAgents: ask firstAdds a comment to a work order, with craft as its author. Writes to the work order in McMain.

Work order document, 1 operation

  • add_work_order_documentsAdd work order documentsPOSTAgents: ask firstUploads one or more documents to a work order, each as a file name plus base64 content. Returns the new document IDs and paths.

Work order hour booking, 1 operation

  • get_work_order_hoursGet work order hoursPOSTAgents: ask firstReturns the hours booked on a work order: employee, week, hour type, hours per weekday and status of each registration.

Work order image, 1 operation

  • add_work_order_imagesAdd work order imagesPOSTAgents: ask firstUploads one or more images to a work order, each as a file name plus base64 content. Returns the new image IDs and paths.

Work order item, 1 operation

  • get_work_order_itemsGet work order itemsPOSTAgents: ask firstReturns the stock items issued to a work order, with item ID, description and quantity issued.

Work order type, 1 operation

  • list_work_order_typesList work order typesGETAgents: ask firstLists the work order types with ID, description, status and initial status. Pass an ID as typeId to create_work_order.

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

Use McMain from Claude Code, Cursor or Codex

Connect McMain in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its McMain 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 McMain

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect McMain once

    Add your McMain 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.

McMain integration FAQ

What can you do with the McMain integration?

LiveContext exposes 138 operations on McMain, covering asset, call, employee and work order.

Popular integrations

Browse the whole catalog