ServiceM8 integration
ServiceM8 is field service management software for trades businesses. Manage jobs (quotes, work orders, completed jobs) and create them from job templates; manage clients and their contacts, job contacts, scheduled bookings and recorded time (job activities), allocations, job materials (quote and invoice line items), payments, checklists, tasks, notes and the materials list; triage the inbox and turn messages into jobs; read staff, staff messages and time events, forms and responses, email and SMS history, attachment records and the account; and search records by text or by meaning. Not exposed: attachment file download and upload, add-on notifications and diary items (OAuth add-ons only), webhook subscriptions, asset types, and changes to configuration objects (categories, queues, badges, templates, tax rates and the like are read-only here). Authentication is a ServiceM8 API key (Settings, API Keys) sent in the X-API-Key header.
Say what should happen.
The workflow builds itself.
What you can do with ServiceM8
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.
Job, 8 operations
convert_inbox_message_to_jobConvert inbox message to jobPOSTConverts an inbox message into a new job, optionally from a job template, and returns the job.create_jobCreate jobPOSTCreates a job. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.create_job_from_templateCreate job from templatePOSTCreates a job by cloning a job template with its tasks, materials, checklists, quotes and custom fields; job_description, company_uuid or company_name, and job_address can be overridden.delete_jobDelete jobDELETEDeletes a job: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_jobGet jobGETReturns one job by its UUID, with all its fields. Jobs are quotes, work orders, unsuccessful or completed jobs (status).list_jobsList jobsGETLists the jobs in the ServiceM8 account. Jobs are quotes, work orders, unsuccessful or completed jobs (status). Narrow it with $filter, for example active eq 1.search_jobs_semanticSearch jobs semanticGETFinds jobs by meaning rather than exact words (embedding similarity), ranked by similarity; limit up to 50, similarity_threshold from 0 to 1.update_jobUpdate jobPOSTUpdates the job with the given UUID, writing the fields you pass.
Client, 5 operations
create_clientCreate clientPOSTCreates a client. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_clientDelete clientDELETEDeletes a client: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_clientGet clientGETReturns one client by its UUID, with all its fields. Clients are called companies in the API.list_clientsList clientsGETLists the clients in the ServiceM8 account. Clients are called companies in the API. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_clientUpdate clientPOSTUpdates the client with the given UUID, writing the fields you pass.
Client contact, 5 operations
create_client_contactCreate client contactPOSTCreates a client contact. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_client_contactDelete client contactDELETEDeletes a client contact: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_client_contactGet client contactGETReturns one client contact by its UUID, with all its fields.list_client_contactsList client contactsGETLists the client contacts in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_client_contactUpdate client contactPOSTUpdates the client contact with the given UUID, writing the fields you pass.
Inbox message, 5 operations
archive_inbox_messageArchive inbox messagePUTArchives or unarchives an inbox message.attach_inbox_message_to_jobAttach inbox message to jobPOSTAttaches an inbox message to an existing job.create_inbox_messageCreate inbox messagePOSTCreates a new message that appears in the ServiceM8 inbox; subject and message_text are required, and jobData can carry job details used when the message is converted to a job.get_inbox_messageGet inbox messageGETReturns one inbox message by its UUID: sender, subject, text and HTML body, read, snooze and archive state, and the job it was converted to.list_inbox_messagesList inbox messagesGETLists messages in the ServiceM8 inbox, with paging (limit 1 to 500, offset), a status filter and a search over subject, sender name and sender email.
Job activity, 5 operations
create_job_activityCreate job activityPOSTCreates a job activity. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_job_activityDelete job activityDELETEDeletes a job activity: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_job_activityGet job activityGETReturns one job activity by its UUID, with all its fields. A job activity is a scheduled booking when activity_was_scheduled is 1, recorded check-in time when 0.list_job_activitiesList job activitiesGETLists the job activities in the ServiceM8 account. A job activity is a scheduled booking when activity_was_scheduled is 1, recorded check-in time when 0. Narrow it with $filter, for example active eq 1.update_job_activityUpdate job activityPOSTUpdates the job activity with the given UUID, writing the fields you pass.
Job allocation, 5 operations
create_job_allocationCreate job allocationPOSTCreates a job allocation. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_job_allocationDelete job allocationDELETEDeletes a job allocation: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_job_allocationGet job allocationGETReturns one job allocation by its UUID, with all its fields.list_job_allocationsList job allocationsGETLists the job allocations in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_job_allocationUpdate job allocationPOSTUpdates the job allocation with the given UUID, writing the fields you pass.
Job checklist item, 5 operations
create_job_checklist_itemCreate job checklist itemPOSTCreates a job checklist item. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_job_checklist_itemDelete job checklist itemDELETEDeletes a job checklist item: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_job_checklist_itemGet job checklist itemGETReturns one job checklist item by its UUID, with all its fields.list_job_checklist_itemsList job checklist itemsGETLists the job checklist items in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_job_checklist_itemUpdate job checklist itemPOSTUpdates the job checklist item with the given UUID, writing the fields you pass.
Job contact, 5 operations
create_job_contactCreate job contactPOSTCreates a job contact. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_job_contactDelete job contactDELETEDeletes a job contact: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_job_contactGet job contactGETReturns one job contact by its UUID, with all its fields.list_job_contactsList job contactsGETLists the job contacts in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_job_contactUpdate job contactPOSTUpdates the job contact with the given UUID, writing the fields you pass.
Job material, 5 operations
create_job_materialCreate job materialPOSTCreates a job material. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_job_materialDelete job materialDELETEDeletes a job material: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_job_materialGet job materialGETReturns one job material by its UUID, with all its fields. Job materials are the line items of a job's quote or invoice.list_job_materialsList job materialsGETLists the job materials in the ServiceM8 account. Job materials are the line items of a job's quote or invoice. Narrow it with $filter, for example active eq 1.update_job_materialUpdate job materialPOSTUpdates the job material with the given UUID, writing the fields you pass.
Job payment, 5 operations
create_job_paymentCreate job paymentPOSTCreates a job payment. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_job_paymentDelete job paymentDELETEDeletes a job payment: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_job_paymentGet job paymentGETReturns one job payment by its UUID, with all its fields.list_job_paymentsList job paymentsGETLists the job payments in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_job_paymentUpdate job paymentPOSTUpdates the job payment with the given UUID, writing the fields you pass.
Material, 5 operations
create_materialCreate materialPOSTCreates a material. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_materialDelete materialDELETEDeletes a material: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_materialGet materialGETReturns one material by its UUID, with all its fields.list_materialsList materialsGETLists the materials in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_materialUpdate materialPOSTUpdates the material with the given UUID, writing the fields you pass.
Note, 5 operations
create_noteCreate notePOSTAdds a note to a record: related_object names the record type (for example job) and related_object_uuid its UUID; note holds the text.delete_noteDelete noteDELETEDeletes a note: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_noteGet noteGETReturns one note by its UUID, with its text and the record it is attached to.list_notesList notesGETLists the notes in the account, each attached to a record by related_object (its type, for example job) and related_object_uuid. Narrow the list with $filter, for example related_object_uuid eq '<job uuid>'.update_noteUpdate notePOSTUpdates the note with the given UUID, writing the fields you pass.
Task, 5 operations
create_taskCreate taskPOSTCreates a task. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.delete_taskDelete taskDELETEDeletes a task: ServiceM8 sets its active field to 0, keeps it readable on the API and hides it in the app.get_taskGet taskGETReturns one task by its UUID, with all its fields.list_tasksList tasksGETLists the tasks in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.update_taskUpdate taskPOSTUpdates the task with the given UUID, writing the fields you pass.
Staff message, 3 operations
create_staff_messageCreate staff messagePOSTCreates a staff message. Pass uuid to choose its id: a generated id is only returned in a response header, which this tool does not return.get_staff_messageGet staff messageGETReturns one staff message by its UUID, with all its fields.list_staff_messagesList staff messagesGETLists the staff messages in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Asset, 2 operations
get_assetGet assetGETReturns one asset by its UUID, with all its fields.list_assetsList assetsGETLists the assets in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Attachment, 2 operations
get_attachmentGet attachmentGETReturns one attachment record by its UUID: file name, file type and the record it belongs to. File bytes are not returned.list_attachmentsList attachmentsGETLists attachment records (quotes, invoices, work orders and photos in job diaries): file name, type and the record each belongs to. File bytes are not returned.
Email, 2 operations
get_job_emailGet job emailGETReturns one job email record by its UUID.list_job_emailsList job emailsGETLists the email history of jobs, inbound and outbound merged. Narrow it with $filter, for example related_object_uuid eq '<job uuid>', and cap it with limit; later pages cannot be fetched.
Feedback record, 2 operations
get_feedback_recordGet feedback recordGETReturns one feedback record by its UUID, with all its fields.list_feedback_recordsList feedback recordsGETLists the feedback records in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Form, 2 operations
get_formGet formGETReturns one form by its UUID, with all its fields.list_formsList formsGETLists the forms in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Form response, 2 operations
get_form_responseGet form responseGETReturns one form response by its UUID, with all its fields.list_form_responsesList form responsesGETLists the form responses in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Job category, 2 operations
get_job_categoryGet job categoryGETReturns one job category by its UUID, with all its fields.list_job_categoriesList job categoriesGETLists the job categories in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Job queue, 2 operations
get_job_queueGet job queueGETReturns one job queue by its UUID, with all its fields.list_job_queuesList job queuesGETLists the job queues in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Job template, 2 operations
get_job_templateGet job templateGETReturns one job template by its UUID, with all its fields.list_job_templatesList job templatesGETLists the job templates in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Knowledge article, 2 operations
get_knowledge_articleGet knowledge articleGETReturns one knowledge article by its UUID, with all its fields.list_knowledge_articlesList knowledge articlesGETLists the knowledge articles in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Location, 2 operations
get_locationGet locationGETReturns one location by its UUID, with all its fields.list_locationsList locationsGETLists the locations in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Material bundle, 2 operations
get_material_bundleGet material bundleGETReturns one material bundle by its UUID, with all its fields.list_material_bundlesList material bundlesGETLists the material bundles in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Record, 2 operations
searchSearchGETSearches text across jobs, clients and materials at once and returns the matches sorted by relevance, each with its type, UUID, title and highlighted snippets.search_by_typeSearch by typeGETSearches text within one object type: job, company, material, knowledgearticle, attachment, formresponse, asset or materialbundle.
Service template, 2 operations
get_service_templateGet service templateGETReturns one editable or published Service record by its UUID.list_service_templatesList service templatesGETLists editable and published Service records (service templates), inactive ones included; narrow with $filter.
Sms, 2 operations
get_job_smsGet job smsGETReturns one job SMS record by its UUID.list_job_smsList job smsGETLists the SMS history of jobs, inbound and outbound merged. Narrow it with $filter, for example related_object_uuid eq '<job uuid>', and cap it with limit; later pages cannot be fetched.
Staff member, 2 operations
get_staff_memberGet staff memberGETReturns one staff member by its UUID, with all its fields.list_staff_membersList staff membersGETLists the staff members in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Staff time event, 2 operations
get_staff_time_eventGet staff time eventGETReturns one staff time event by its UUID, with all its fields.list_staff_time_eventsList staff time eventsGETLists the staff time events in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Supplier, 2 operations
get_supplierGet supplierGETReturns one supplier by its UUID, with all its fields.list_suppliersList suppliersGETLists the suppliers in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Tax rate, 2 operations
get_tax_rateGet tax rateGETReturns one tax rate by its UUID, with all its fields.list_tax_ratesList tax ratesGETLists the tax rates in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Account, 1 operation
get_accountGet accountGETReturns the ServiceM8 account (the API calls it the vendor): business name and number, email, billing address, currency, time zone, opening hours and invoice terms.
Allocation window, 1 operation
list_allocation_windowsList allocation windowsGETLists the allocation windows in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Availability, 1 operation
list_availabilitiesList availabilitiesGETLists the availabilities in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Badge, 1 operation
list_badgesList badgesGETLists the badges in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Document template, 1 operation
list_document_templatesList document templatesGETLists the document templates in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Email template, 1 operation
list_email_templatesList email templatesGETLists the email templates in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Form field, 1 operation
list_form_fieldsList form fieldsGETLists the form fields in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Security role, 1 operation
list_security_rolesList security rolesGETLists the security roles in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Sms template, 1 operation
list_sms_templatesList sms templatesGETLists the SMS templates in the ServiceM8 account. Deleted records stay listed with active 0; narrow the list with $filter (eq, ne, gt, lt joined by and, up to 10 conditions), for example active eq 1.
Use ServiceM8 from Claude Code, Cursor or Codex
Connect ServiceM8 in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its ServiceM8 operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect ServiceM8
- Create your workspace
Sign up free. Nothing to install.
- Connect ServiceM8 once
Add your ServiceM8 connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- 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.
ServiceM8 integration FAQ
What can you do with the ServiceM8 integration?
LiveContext exposes 118 operations on ServiceM8, covering job, client, client contact and inbox message.
