Skip to content

Connectors · Logistics & field service

ServiceM8 MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to ServiceM8 and the rest of your systems. It gives your agent 225 ServiceM8 actions (100 reads, 86 writes and 39 that wait for a confirmation) and holds the ServiceM8 credential itself, so the agent never does. It paces ServiceM8's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "servicem8.company_contacts.list",  intent: "check which ServiceM8 account is connected"}# List all Company Contacts · read · 1 upstream call
  • 225actionsin one signed file
  • 100readlook, never change
  • 86writecreate and update
  • 39wait for a yesdestructive, confirmed first

Set up

Connect ServiceM8 in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect ServiceM8.

    API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.

    • api_keyServiceM8 API key: in ServiceM8 go to Settings > API Keys and generate a key
    account { op: "connections.requirements", service: "servicem8" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "servicem8.company_contacts.list" }# list all company contacts · read · 1 upstream callcheck { action: "servicem8.company_contacts.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

ServiceM8 at a glance

Sign-in
API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
You provide
api_key
Limits we pace to
180 calls a minute and 20,000 a day, per connection
API covered
ServiceM8 REST API 1.0 (OpenAPI 3.1, per-operation definitions from developer.servicem8.com)api.servicem8.com
Built from
ServiceM8's documentation, read 23 October 2026developer.servicem8.comdeveloper.servicem8.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
98 of 100 reads, for up to 5 minutes; a write clears what it affects
Shared entities
7, so ask can line ServiceM8 up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in ServiceM8.

225 actions in 54 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 100readlook, never change
  • 86writecreate and update
  • 39destructivewait for a confirmation
  1. Inbox messages

    9

    2 read · 7 write · 0 destructive

    Add note to message · Convert message to job · Create a new inbox message · List inbox messages

  2. Allocation windows

    5

    2 read · 2 write · 1 destructive

    Create a new Allocation Window · List all Allocation Windows · Retrieve an Allocation Window · Update an Allocation Window

  3. Asset type fields

    5

    2 read · 2 write · 1 destructive

    Create a new Asset Type Field · List all Asset Type Fields · Retrieve an Asset Type Field · Update an Asset Type Field

  4. Asset types

    5

    2 read · 2 write · 1 destructive

    List all Asset Types · Create a new Asset Type · Update an Asset Type · Retrieve an Asset Type

  5. Attachments

    5

    2 read · 2 write · 1 destructive

    Create a new Attachment · List all Attachments · Retrieve an Attachment · Update an Attachment

  6. Availabilities

    5

    2 read · 2 write · 1 destructive

    Create a new Availability · List all Availabilities · Retrieve an Availability · Update an Availability

  7. Badges

    5

    2 read · 2 write · 1 destructive

    Create a new Badge · List all Badges · Retrieve a Badge · Update a Badge

  8. Categories

    5

    2 read · 2 write · 1 destructive

    Create a new Category · List all Categories · Retrieve a Category · Update a Category

46 more areas · 181 actions
  • Companies 5
  • Company contacts 5
  • Document templates 5
  • Email templates 5
  • Feedback 5
  • Form fields 5
  • Form responses 5
  • Forms 5
  • Job activities 5
  • Job allocations 5
  • Job checklists 5
  • Job contacts 5
  • Job material bundles 5
  • Job materials 5
  • Job payments 5
  • Job queues 5
  • Jobs 5
  • Knowledge articles 5
  • Locations 5
  • Material bundles 5
  • Materials 5
  • Notes 5
  • SMS templates 5
  • Staff 5
  • Staff messages 5
  • Suppliers 5
  • Tasks 5
  • Tax rates 5
  • Assets 4
  • Service templates 4
  • Webhook subscriptions 4
  • Addon secrets 3
  • Job templates 3
  • Search 3
  • Addon SDK 2
  • Addons 2
  • Emails 2
  • Job admin activities 2
  • Security roles 2
  • SMS messages 2
  • Staff time events 2
  • Vendors 2
  • Accounts 1
  • Addon deployments 1
  • Addon log sessions 1
  • Feed posts 1

Top actions

The ServiceM8 API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 74 of ServiceM8's 74 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
servicem8.company_contacts.listList all Company ContactsList all Company Contacts.readcrm.contact.list177 connectors
servicem8.companies.listList all ClientsList all Clients.readcrm.company.list162 connectors
servicem8.tasks.listList all TasksList all Tasks.readwork.task.list122 connectors
servicem8.assets.listList all AssetsList all Assets.readasset.asset.list42 connectors
servicem8.suppliers.listList all SuppliersList all Suppliers.readasset.supplier.list41 connectors
servicem8.staff.listList all Staff MembersList all Staff Members.readhr.employee.list61 connectors
servicem8.company_contacts.createCreate a new Company ContactCreate a new Company Contact.writecrm.contact.create161 connectors
servicem8.companies.createCreate a new ClientCreate a new Client.writecrm.company.create142 connectors
servicem8.tasks.createCreate a new TaskCreate a new Task.writework.task.create127 connectors
servicem8.suppliers.createCreate a new SupplierCreate a new Supplier.writeasset.supplier.create31 connectors
servicem8.staff.createCreate a new Staff MemberCreate a new Staff Member.writehr.employee.create51 connectors
servicem8.company_contacts.deleteDelete a Company ContactDelete a Company Contact.destructivecrm.contact.delete147 connectors

Try it

Prompts to paste into Claude.

Each one names the ServiceM8 actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Which ServiceM8 tickets have been open the longest? Show me the ten oldest with their status.

    callsservicem8.jobs.list

  2. Writewrite

    Create a new Company Contact in ServiceM8. Show me exactly what you will send before you save it.

    callsservicem8.company_contacts.create

  3. Across systemsread

    Which ServiceM8 companies have invoices in ConnectWise PSA, and how many each?

    callsservicem8.companies.listconnectwise_manage.invoices.list

Across your systems

ServiceM8, joined to the rest of your business.

One ask fetches from ServiceM8 and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

  • Which ServiceM8 companies have invoices in ConnectWise PSA, and how many each?

    servicem8.companies.list + connectwise_manage.invoices.list, on crm.company · ConnectWise PSA

  • Which ServiceM8 companies have invoices in NetSuite, and how many each?

    servicem8.companies.list + netsuite.views.invoices, on crm.company · NetSuite

Also mapped by other connectorscrm.company 227crm.contact 192work.task 105hr.employee 63service.ticket 62asset.asset 40asset.supplier 38
ask
ask {  intent: "which ServiceM8 companies have invoices in ConnectWise PSA, and how many each",  steps: [    { action: "servicem8.companies.list", as: "co", input: {}, limit: 100, max_pages: 5 },    { action: "connectwise_manage.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },    { join: {        left: "co",        right: "inv",        on: "crm.company",        group_by: "co.name",        select: ["co.name", "count(inv.id) as invoices"]    } }  ]}
Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for ServiceM8

Destructive actions wait for a yes.

39 ServiceM8 actions are destructive. The first 10:

  • Delete a Company Contactservicem8.company_contacts.delete
  • Delete a Clientservicem8.companies.delete
  • Delete a Taskservicem8.tasks.delete
  • Delete an Assetservicem8.assets.delete
  • Delete a Supplierservicem8.suppliers.delete
  • Delete a Staff Memberservicem8.staff.delete
  • Delete a Job Paymentservicem8.job_payments.delete
  • Delete an Asset Typeservicem8.asset_types.delete
  • Delete a Formservicem8.forms.delete
  • Delete a Form Responseservicem8.form_responses.delete

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

doservicem8.company_contacts.deleteconfirm_policy: human

Delete a Company Contact?

intent: the user asked me to delete a Company Contact

run suspended · waiting for a named person · key servicem8-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "servicem8-agent",  allowed_actions: ["servicem8.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "servicem8.company_contacts.delete", approver: "[email protected]" },    { match: "servicem8.companies.delete", approver: "[email protected]" },    { match: "servicem8.tasks.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to ServiceM8 only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What ServiceM8 costs on actionlake.

Every ServiceM8 action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call ServiceM8 refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 225 ServiceM8 actions
  • 225actions pageeach page of a long list is one call
  • 98reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every ServiceM8 action.

225 actions by area: the id your agent calls, what it does, and its effect.

Inbox messages9
  • servicem8.inbox_messages.add_noteAdd note to messagewrite
  • servicem8.inbox_messages.archiveArchive or unarchive messagewrite
  • servicem8.inbox_messages.attach_to_jobAttach message to existing jobwrite
  • servicem8.inbox_messages.convert_to_jobConvert message to jobwrite
  • servicem8.inbox_messages.createCreate a new inbox messagewrite
  • servicem8.inbox_messages.getGet inbox message detailsread
  • servicem8.inbox_messages.listList inbox messagesread
  • servicem8.inbox_messages.mark_readMark message as readwrite
  • servicem8.inbox_messages.snoozeSnooze or unsnooze messagewrite
Allocation windows5
  • servicem8.allocation_windows.createCreate a new Allocation Windowwrite
  • servicem8.allocation_windows.deleteDelete an Allocation Windowdestructive
  • servicem8.allocation_windows.getRetrieve an Allocation Windowread
  • servicem8.allocation_windows.listList all Allocation Windowsread
  • servicem8.allocation_windows.updateUpdate an Allocation Windowwrite
Asset type fields5
  • servicem8.asset_type_fields.createCreate a new Asset Type Fieldwrite
  • servicem8.asset_type_fields.deleteDelete an Asset Type Fielddestructive
  • servicem8.asset_type_fields.getRetrieve an Asset Type Fieldread
  • servicem8.asset_type_fields.listList all Asset Type Fieldsread
  • servicem8.asset_type_fields.updateUpdate an Asset Type Fieldwrite
Asset types5
  • servicem8.asset_types.createCreate a new Asset Typewrite
  • servicem8.asset_types.deleteDelete an Asset Typedestructive
  • servicem8.asset_types.getRetrieve an Asset Typeread
  • servicem8.asset_types.listList all Asset Typesread
  • servicem8.asset_types.updateUpdate an Asset Typewrite
Attachments5
  • servicem8.attachments.createCreate a new Attachmentwrite
  • servicem8.attachments.deleteDelete an Attachmentdestructive
  • servicem8.attachments.getRetrieve an Attachmentread
  • servicem8.attachments.listList all Attachmentsread
  • servicem8.attachments.updateUpdate an Attachmentwrite
Availabilities5
  • servicem8.availabilities.createCreate a new Availabilitywrite
  • servicem8.availabilities.deleteDelete an Availabilitydestructive
  • servicem8.availabilities.getRetrieve an Availabilityread
  • servicem8.availabilities.listList all Availabilitiesread
  • servicem8.availabilities.updateUpdate an Availabilitywrite
Badges5
  • servicem8.badges.createCreate a new Badgewrite
  • servicem8.badges.deleteDelete a Badgedestructive
  • servicem8.badges.getRetrieve a Badgeread
  • servicem8.badges.listList all Badgesread
  • servicem8.badges.updateUpdate a Badgewrite
Categories5
  • servicem8.categories.createCreate a new Categorywrite
  • servicem8.categories.deleteDelete a Categorydestructive
  • servicem8.categories.getRetrieve a Categoryread
  • servicem8.categories.listList all Categoriesread
  • servicem8.categories.updateUpdate a Categorywrite
Companies5
  • servicem8.companies.createCreate a new Clientwrite
  • servicem8.companies.deleteDelete a Clientdestructive
  • servicem8.companies.getRetrieve a Clientread
  • servicem8.companies.listList all Clientsread
  • servicem8.companies.updateUpdate a Clientwrite
Company contacts5
  • servicem8.company_contacts.createCreate a new Company Contactwrite
  • servicem8.company_contacts.deleteDelete a Company Contactdestructive
  • servicem8.company_contacts.getRetrieve a Company Contactread
  • servicem8.company_contacts.listList all Company Contactsread
  • servicem8.company_contacts.updateUpdate a Company Contactwrite
Document templates5
  • servicem8.document_templates.createCreate a new Document Templatewrite
  • servicem8.document_templates.deleteDelete a Document Templatedestructive
  • servicem8.document_templates.getRetrieve a Document Templateread
  • servicem8.document_templates.listList all Document Templatesread
  • servicem8.document_templates.updateUpdate a Document Templatewrite
Email templates5
  • servicem8.email_templates.createCreate a new Email Templatewrite
  • servicem8.email_templates.deleteDelete an Email Templatedestructive
  • servicem8.email_templates.getRetrieve an Email Templateread
  • servicem8.email_templates.listList all Email Templatesread
  • servicem8.email_templates.updateUpdate an Email Templatewrite
Feedback5
  • servicem8.feedback.createCreate a new Feedbackwrite
  • servicem8.feedback.deleteDelete a Feedbackdestructive
  • servicem8.feedback.getRetrieve a Feedbackread
  • servicem8.feedback.listList all Feedbackread
  • servicem8.feedback.updateUpdate a Feedbackwrite
Form fields5
  • servicem8.form_fields.createCreate a new Form Fieldwrite
  • servicem8.form_fields.deleteDelete a Form Fielddestructive
  • servicem8.form_fields.getRetrieve a Form Fieldread
  • servicem8.form_fields.listList all Form Fieldsread
  • servicem8.form_fields.updateUpdate a Form Fieldwrite
Form responses5
  • servicem8.form_responses.createCreate a new Form Responsewrite
  • servicem8.form_responses.deleteDelete a Form Responsedestructive
  • servicem8.form_responses.getRetrieve a Form Responseread
  • servicem8.form_responses.listList all Form Responsesread
  • servicem8.form_responses.updateUpdate a Form Responsewrite
Forms5
  • servicem8.forms.createCreate a new Formwrite
  • servicem8.forms.deleteDelete a Formdestructive
  • servicem8.forms.getRetrieve a Formread
  • servicem8.forms.listList all Formsread
  • servicem8.forms.updateUpdate a Formwrite
Job activities5
  • servicem8.job_activities.createCreate a new Job Activitywrite
  • servicem8.job_activities.deleteDelete a Job Activitydestructive
  • servicem8.job_activities.getRetrieve a Job Activityread
  • servicem8.job_activities.listList all Job Activitiesread
  • servicem8.job_activities.updateUpdate a Job Activitywrite
Job allocations5
  • servicem8.job_allocations.createCreate a new Job Allocationwrite
  • servicem8.job_allocations.deleteDelete a Job Allocationdestructive
  • servicem8.job_allocations.getRetrieve a Job Allocationread
  • servicem8.job_allocations.listList all Job Allocationsread
  • servicem8.job_allocations.updateUpdate a Job Allocationwrite
Job checklists5
  • servicem8.job_checklists.createCreate a new Job Checklistwrite
  • servicem8.job_checklists.deleteDelete a Job Checklistdestructive
  • servicem8.job_checklists.getRetrieve a Job Checklistread
  • servicem8.job_checklists.listList all Job Checklistsread
  • servicem8.job_checklists.updateUpdate a Job Checklistwrite
Job contacts5
  • servicem8.job_contacts.createCreate a new Job Contactwrite
  • servicem8.job_contacts.deleteDelete a Job Contactdestructive
  • servicem8.job_contacts.getRetrieve a Job Contactread
  • servicem8.job_contacts.listList all Job Contactsread
  • servicem8.job_contacts.updateUpdate a Job Contactwrite
Job material bundles5
  • servicem8.job_material_bundles.createCreate a new Job Material Bundlewrite
  • servicem8.job_material_bundles.deleteDelete a Job Material Bundledestructive
  • servicem8.job_material_bundles.getRetrieve a Job Material Bundleread
  • servicem8.job_material_bundles.listList all Job Material Bundlesread
  • servicem8.job_material_bundles.updateUpdate a Job Material Bundlewrite
Job materials5
  • servicem8.job_materials.createCreate a new Job Materialwrite
  • servicem8.job_materials.deleteDelete a Job Materialdestructive
  • servicem8.job_materials.getRetrieve a Job Materialread
  • servicem8.job_materials.listList all Job Materialsread
  • servicem8.job_materials.updateUpdate a Job Materialwrite
Job payments5
  • servicem8.job_payments.createCreate a new Job Paymentwrite
  • servicem8.job_payments.deleteDelete a Job Paymentdestructive
  • servicem8.job_payments.getRetrieve a Job Paymentread
  • servicem8.job_payments.listList all Job Paymentsread
  • servicem8.job_payments.updateUpdate a Job Paymentwrite
Job queues5
  • servicem8.job_queues.createCreate a new Job Queuewrite
  • servicem8.job_queues.deleteDelete a Job Queuedestructive
  • servicem8.job_queues.getRetrieve a Job Queueread
  • servicem8.job_queues.listList all Job Queuesread
  • servicem8.job_queues.updateUpdate a Job Queuewrite
Jobs5
  • servicem8.jobs.createCreate a new Jobwrite
  • servicem8.jobs.deleteDelete a Jobdestructive
  • servicem8.jobs.getRetrieve a Jobread
  • servicem8.jobs.listList all Jobsread
  • servicem8.jobs.updateUpdate a Jobwrite
Knowledge articles5
  • servicem8.knowledge_articles.createCreate a new Knowledge Articlewrite
  • servicem8.knowledge_articles.deleteDelete a Knowledge Articledestructive
  • servicem8.knowledge_articles.getRetrieve a Knowledge Articleread
  • servicem8.knowledge_articles.listList all Knowledge Articlesread
  • servicem8.knowledge_articles.updateUpdate a Knowledge Articlewrite
Locations5
  • servicem8.locations.createCreate a new Locationwrite
  • servicem8.locations.deleteDelete a Locationdestructive
  • servicem8.locations.getRetrieve a Locationread
  • servicem8.locations.listList all Locationsread
  • servicem8.locations.updateUpdate a Locationwrite
Material bundles5
  • servicem8.material_bundles.createCreate a new Bundlewrite
  • servicem8.material_bundles.deleteDelete a Bundledestructive
  • servicem8.material_bundles.getRetrieve a Bundleread
  • servicem8.material_bundles.listList all Bundlesread
  • servicem8.material_bundles.updateUpdate a Bundlewrite
Materials5
  • servicem8.materials.createCreate a new Materialwrite
  • servicem8.materials.deleteDelete a Materialdestructive
  • servicem8.materials.getRetrieve a Materialread
  • servicem8.materials.listList all Materialsread
  • servicem8.materials.updateUpdate a Materialwrite
Notes5
  • servicem8.notes.createCreate a new Notewrite
  • servicem8.notes.deleteDelete a Notedestructive
  • servicem8.notes.getRetrieve a Noteread
  • servicem8.notes.listList all Notesread
  • servicem8.notes.updateUpdate a Notewrite
SMS templates5
  • servicem8.sms_templates.createCreate a new SMS Templatewrite
  • servicem8.sms_templates.deleteDelete an SMS Templatedestructive
  • servicem8.sms_templates.getRetrieve an SMS Templateread
  • servicem8.sms_templates.listList all SMS Templatesread
  • servicem8.sms_templates.updateUpdate an SMS Templatewrite
Staff5
  • servicem8.staff.createCreate a new Staff Memberwrite
  • servicem8.staff.deleteDelete a Staff Memberdestructive
  • servicem8.staff.getRetrieve a Staff Memberread
  • servicem8.staff.listList all Staff Membersread
  • servicem8.staff.updateUpdate a Staff Memberwrite
Staff messages5
  • servicem8.staff_messages.createCreate a new Staff Messagewrite
  • servicem8.staff_messages.deleteDelete a Staff Messagedestructive
  • servicem8.staff_messages.getRetrieve a Staff Messageread
  • servicem8.staff_messages.listList all Staff Messagesread
  • servicem8.staff_messages.updateUpdate a Staff Messagewrite
Suppliers5
  • servicem8.suppliers.createCreate a new Supplierwrite
  • servicem8.suppliers.deleteDelete a Supplierdestructive
  • servicem8.suppliers.getRetrieve a Supplierread
  • servicem8.suppliers.listList all Suppliersread
  • servicem8.suppliers.updateUpdate a Supplierwrite
Tasks5
  • servicem8.tasks.createCreate a new Taskwrite
  • servicem8.tasks.deleteDelete a Taskdestructive
  • servicem8.tasks.getRetrieve a Taskread
  • servicem8.tasks.listList all Tasksread
  • servicem8.tasks.updateUpdate a Taskwrite
Tax rates5
  • servicem8.tax_rates.createCreate a new Tax Ratewrite
  • servicem8.tax_rates.deleteDelete a Tax Ratedestructive
  • servicem8.tax_rates.getRetrieve a Tax Rateread
  • servicem8.tax_rates.listList all Tax Ratesread
  • servicem8.tax_rates.updateUpdate a Tax Ratewrite
Assets4
  • servicem8.assets.deleteDelete an Assetdestructive
  • servicem8.assets.getRetrieve an Assetread
  • servicem8.assets.listList all Assetsread
  • servicem8.assets.updateUpdate an Assetwrite
Service templates4
  • servicem8.service_templates.deleteSoft-delete a ServiceTemplatedestructive
  • servicem8.service_templates.getGet a ServiceTemplateread
  • servicem8.service_templates.listList ServiceTemplatesread
  • servicem8.service_templates.upsertCreate or update a ServiceTemplatewrite
Webhook subscriptions4
  • servicem8.webhook_subscriptions.create_eventCreate or Update an Event Webhook Subscriptionwrite
  • servicem8.webhook_subscriptions.create_objectCreate or Update an Object Webhook Subscriptionwrite
  • servicem8.webhook_subscriptions.deleteDelete a Webhook Subscriptiondestructive
  • servicem8.webhook_subscriptions.listList Webhook Subscriptionsread
Addon secrets3
  • servicem8.addon_secrets.deleteDelete a secretdestructive
  • servicem8.addon_secrets.listList secret names for an add-onread
  • servicem8.addon_secrets.setSet a secretwrite
Job templates3
  • servicem8.job_templates.create_jobCreate a job from a templatewrite
  • servicem8.job_templates.getRetrieve a Job Templateread
  • servicem8.job_templates.listList all Job Templatesread
Search3
  • servicem8.search.generalSearch across multiple object typesread
  • servicem8.search.jobs_semanticSemantic search for jobsread
  • servicem8.search.objectsSearch within a specific object typeread
Addon SDK2
  • servicem8.addon_sdk.get_manifest_schemaGet the add-on manifest v1 JSON Schemaread
  • servicem8.addon_sdk.whoamiIdentify the authenticated accountread
Addons2
  • servicem8.addons.getFetch one add-on by slugread
  • servicem8.addons.listList the account's add-onsread
Emails2
  • servicem8.emails.getGet one job email recordread
  • servicem8.emails.listList job email historyread
Job admin activities2
  • servicem8.job_admin_activities.getRetrieve a Job Activityread
  • servicem8.job_admin_activities.listList all Job Activitiesread
Security roles2
  • servicem8.security_roles.getRetrieve a Security Roleread
  • servicem8.security_roles.listList all Security Rolesread
SMS messages2
  • servicem8.sms_messages.getGet one job SMS recordread
  • servicem8.sms_messages.listList job SMS historyread
Staff time events2
  • servicem8.staff_time_events.getRetrieve a Staff Time Eventread
  • servicem8.staff_time_events.listList all Staff Time Eventsread
Vendors2
  • servicem8.vendors.getRetrieve a Vendorread
  • servicem8.vendors.listList all Vendorsread
Accounts1
  • servicem8.accounts.provisionProvision a new ServiceM8 accountwrite
Addon deployments1
  • servicem8.addon_deployments.getPoll deployment statusread
Addon log sessions1
  • servicem8.addon_log_sessions.createStream live logs for one add-on over SSEwrite
Feed posts1
  • servicem8.feed_posts.createPost a message to the activity feedwrite

Questions

The ServiceM8 MCP server, answered.

Is there a ServiceM8 MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 225 ServiceM8 actions across inbox messages, allocation windows, asset type fields and asset types, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by ServiceM8.

What do I need to connect ServiceM8?

ServiceM8 API key: in ServiceM8 go to Settings > API Keys and generate a key. The free call account { op: "connections.requirements", service: "servicem8" } lists exactly what to paste.

Can an AI agent delete or change things in ServiceM8?

Only if its key allows it, and only with an explicit confirmation. 39 ServiceM8 actions are destructive, including delete a Company Contact, delete a Client and delete a Task. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my ServiceM8 API limit?

actionlake paces every call to the limits in the ServiceM8 service file: 180 calls a minute and 20,000 a day per connection. Repeated reads are answered from cache (98 ServiceM8 actions can be), which never reaches ServiceM8.

What does a ServiceM8 action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (225 ServiceM8 actions page). Cache hits, searches, dry runs and calls ServiceM8 refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which ServiceM8 API does it cover?

The ServiceM8 REST API 1.0 (OpenAPI 3.1, per-operation definitions from developer.servicem8.com) at api.servicem8.com. It is built from ServiceM8's documentation as read on 23 October 2026. 225 actions in 54 areas, each one in the signed service file (version 1.0.0).

Can I combine ServiceM8 with my other systems?

Yes. ask joins ServiceM8 to ConnectWise PSA or NetSuite on the same customer and returns the answer rather than every row. ServiceM8 maps crm.company, which 227 other connectors also map.

Does actionlake keep my ServiceM8 data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your ServiceM8 credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent ServiceM8 today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.