---
title: "ServiceM8 MCP server for AI agents - actionlake"
description: "Give Claude 225 ServiceM8 actions through one MCP server: inbox messages, allocation windows. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/servicem8
updated: 2026-10-23
---

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.

[Connect ServiceM8 free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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
```

- 225 actions in one signed file
- 100 read look, never change
- 86 write create and update
- 39 wait for a yes destructive, 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_key` ServiceM8 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 call
   check { 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 2026[developer.servicem8.com](https://developer.servicem8.com/reference) [developer.servicem8.com](https://developer.servicem8.com/docs/pagination)

**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.

- **100** read look, never change
- **86** write create and update
- **39** destructive wait 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.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `servicem8.company_contacts.list` List all Company Contacts | List all Company Contacts. | read | `crm.contact.list` 177 connectors |
| `servicem8.companies.list` List all Clients | List all Clients. | read | `crm.company.list` 162 connectors |
| `servicem8.tasks.list` List all Tasks | List all Tasks. | read | `work.task.list` 122 connectors |
| `servicem8.assets.list` List all Assets | List all Assets. | read | `asset.asset.list` 42 connectors |
| `servicem8.suppliers.list` List all Suppliers | List all Suppliers. | read | `asset.supplier.list` 41 connectors |
| `servicem8.staff.list` List all Staff Members | List all Staff Members. | read | `hr.employee.list` 61 connectors |
| `servicem8.company_contacts.create` Create a new Company Contact | Create a new Company Contact. | write | `crm.contact.create` 161 connectors |
| `servicem8.companies.create` Create a new Client | Create a new Client. | write | `crm.company.create` 142 connectors |
| `servicem8.tasks.create` Create a new Task | Create a new Task. | write | `work.task.create` 127 connectors |
| `servicem8.suppliers.create` Create a new Supplier | Create a new Supplier. | write | `asset.supplier.create` 31 connectors |
| `servicem8.staff.create` Create a new Staff Member | Create a new Staff Member. | write | `hr.employee.create` 51 connectors |
| `servicem8.company_contacts.delete` Delete a Company Contact | Delete a Company Contact. | destructive | `crm.contact.delete` 147 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. Read read
   Which ServiceM8 tickets have been open the longest? Show me the ten oldest with their status.
   calls `servicem8.jobs.list`
2. Write write
   Create a new Company Contact in ServiceM8. Show me exactly what you will send before you save it.
   calls `servicem8.company_contacts.create`
3. Across systems read
   Which ServiceM8 companies have invoices in ConnectWise PSA, and how many each?
   calls `servicem8.companies.list` `connectwise_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](https://actionlake.com/connectors/connectwise-psa)
- Which ServiceM8 companies have invoices in NetSuite, and how many each?
  `servicem8.companies.list` + `netsuite.views.invoices`, on `crm.company` · [NetSuite](https://actionlake.com/connectors/netsuite)

Also mapped by other connectors `crm.company` **227** `crm.contact` **192** `work.task` **105** `hr.employee` **63** `service.ticket` **62** `asset.asset` **40** `asset.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 Contact `servicem8.company_contacts.delete`
- Delete a Client `servicem8.companies.delete`
- Delete a Task `servicem8.tasks.delete`
- Delete an Asset `servicem8.assets.delete`
- Delete a Supplier `servicem8.suppliers.delete`
- Delete a Staff Member `servicem8.staff.delete`
- Delete a Job Payment `servicem8.job_payments.delete`
- Delete an Asset Type `servicem8.asset_types.delete`
- Delete a Form `servicem8.forms.delete`
- Delete a Form Response `servicem8.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.

do servicem8.company_contacts.delete confirm_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: "lead@example.com" },
    { match: "servicem8.companies.delete", approver: "lead@example.com" },
    { match: "servicem8.tasks.delete", approver: "lead@example.com" }
  ]
}
```

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.

- 1 upstream call per action all 225 ServiceM8 actions
- 225 actions page each page of a long list is one call
- 98 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every ServiceM8 action.

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

**Inbox messages 9**

- `servicem8.inbox_messages.add_note` Add note to message write
- `servicem8.inbox_messages.archive` Archive or unarchive message write
- `servicem8.inbox_messages.attach_to_job` Attach message to existing job write
- `servicem8.inbox_messages.convert_to_job` Convert message to job write
- `servicem8.inbox_messages.create` Create a new inbox message write
- `servicem8.inbox_messages.get` Get inbox message details read
- `servicem8.inbox_messages.list` List inbox messages read
- `servicem8.inbox_messages.mark_read` Mark message as read write
- `servicem8.inbox_messages.snooze` Snooze or unsnooze message write

**Allocation windows 5**

- `servicem8.allocation_windows.create` Create a new Allocation Window write
- `servicem8.allocation_windows.delete` Delete an Allocation Window destructive
- `servicem8.allocation_windows.get` Retrieve an Allocation Window read
- `servicem8.allocation_windows.list` List all Allocation Windows read
- `servicem8.allocation_windows.update` Update an Allocation Window write

**Asset type fields 5**

- `servicem8.asset_type_fields.create` Create a new Asset Type Field write
- `servicem8.asset_type_fields.delete` Delete an Asset Type Field destructive
- `servicem8.asset_type_fields.get` Retrieve an Asset Type Field read
- `servicem8.asset_type_fields.list` List all Asset Type Fields read
- `servicem8.asset_type_fields.update` Update an Asset Type Field write

**Asset types 5**

- `servicem8.asset_types.create` Create a new Asset Type write
- `servicem8.asset_types.delete` Delete an Asset Type destructive
- `servicem8.asset_types.get` Retrieve an Asset Type read
- `servicem8.asset_types.list` List all Asset Types read
- `servicem8.asset_types.update` Update an Asset Type write

**Attachments 5**

- `servicem8.attachments.create` Create a new Attachment write
- `servicem8.attachments.delete` Delete an Attachment destructive
- `servicem8.attachments.get` Retrieve an Attachment read
- `servicem8.attachments.list` List all Attachments read
- `servicem8.attachments.update` Update an Attachment write

**Availabilities 5**

- `servicem8.availabilities.create` Create a new Availability write
- `servicem8.availabilities.delete` Delete an Availability destructive
- `servicem8.availabilities.get` Retrieve an Availability read
- `servicem8.availabilities.list` List all Availabilities read
- `servicem8.availabilities.update` Update an Availability write

**Badges 5**

- `servicem8.badges.create` Create a new Badge write
- `servicem8.badges.delete` Delete a Badge destructive
- `servicem8.badges.get` Retrieve a Badge read
- `servicem8.badges.list` List all Badges read
- `servicem8.badges.update` Update a Badge write

**Categories 5**

- `servicem8.categories.create` Create a new Category write
- `servicem8.categories.delete` Delete a Category destructive
- `servicem8.categories.get` Retrieve a Category read
- `servicem8.categories.list` List all Categories read
- `servicem8.categories.update` Update a Category write

**Companies 5**

- `servicem8.companies.create` Create a new Client write
- `servicem8.companies.delete` Delete a Client destructive
- `servicem8.companies.get` Retrieve a Client read
- `servicem8.companies.list` List all Clients read
- `servicem8.companies.update` Update a Client write

**Company contacts 5**

- `servicem8.company_contacts.create` Create a new Company Contact write
- `servicem8.company_contacts.delete` Delete a Company Contact destructive
- `servicem8.company_contacts.get` Retrieve a Company Contact read
- `servicem8.company_contacts.list` List all Company Contacts read
- `servicem8.company_contacts.update` Update a Company Contact write

**Document templates 5**

- `servicem8.document_templates.create` Create a new Document Template write
- `servicem8.document_templates.delete` Delete a Document Template destructive
- `servicem8.document_templates.get` Retrieve a Document Template read
- `servicem8.document_templates.list` List all Document Templates read
- `servicem8.document_templates.update` Update a Document Template write

**Email templates 5**

- `servicem8.email_templates.create` Create a new Email Template write
- `servicem8.email_templates.delete` Delete an Email Template destructive
- `servicem8.email_templates.get` Retrieve an Email Template read
- `servicem8.email_templates.list` List all Email Templates read
- `servicem8.email_templates.update` Update an Email Template write

**Feedback 5**

- `servicem8.feedback.create` Create a new Feedback write
- `servicem8.feedback.delete` Delete a Feedback destructive
- `servicem8.feedback.get` Retrieve a Feedback read
- `servicem8.feedback.list` List all Feedback read
- `servicem8.feedback.update` Update a Feedback write

**Form fields 5**

- `servicem8.form_fields.create` Create a new Form Field write
- `servicem8.form_fields.delete` Delete a Form Field destructive
- `servicem8.form_fields.get` Retrieve a Form Field read
- `servicem8.form_fields.list` List all Form Fields read
- `servicem8.form_fields.update` Update a Form Field write

**Form responses 5**

- `servicem8.form_responses.create` Create a new Form Response write
- `servicem8.form_responses.delete` Delete a Form Response destructive
- `servicem8.form_responses.get` Retrieve a Form Response read
- `servicem8.form_responses.list` List all Form Responses read
- `servicem8.form_responses.update` Update a Form Response write

**Forms 5**

- `servicem8.forms.create` Create a new Form write
- `servicem8.forms.delete` Delete a Form destructive
- `servicem8.forms.get` Retrieve a Form read
- `servicem8.forms.list` List all Forms read
- `servicem8.forms.update` Update a Form write

**Job activities 5**

- `servicem8.job_activities.create` Create a new Job Activity write
- `servicem8.job_activities.delete` Delete a Job Activity destructive
- `servicem8.job_activities.get` Retrieve a Job Activity read
- `servicem8.job_activities.list` List all Job Activities read
- `servicem8.job_activities.update` Update a Job Activity write

**Job allocations 5**

- `servicem8.job_allocations.create` Create a new Job Allocation write
- `servicem8.job_allocations.delete` Delete a Job Allocation destructive
- `servicem8.job_allocations.get` Retrieve a Job Allocation read
- `servicem8.job_allocations.list` List all Job Allocations read
- `servicem8.job_allocations.update` Update a Job Allocation write

**Job checklists 5**

- `servicem8.job_checklists.create` Create a new Job Checklist write
- `servicem8.job_checklists.delete` Delete a Job Checklist destructive
- `servicem8.job_checklists.get` Retrieve a Job Checklist read
- `servicem8.job_checklists.list` List all Job Checklists read
- `servicem8.job_checklists.update` Update a Job Checklist write

**Job contacts 5**

- `servicem8.job_contacts.create` Create a new Job Contact write
- `servicem8.job_contacts.delete` Delete a Job Contact destructive
- `servicem8.job_contacts.get` Retrieve a Job Contact read
- `servicem8.job_contacts.list` List all Job Contacts read
- `servicem8.job_contacts.update` Update a Job Contact write

**Job material bundles 5**

- `servicem8.job_material_bundles.create` Create a new Job Material Bundle write
- `servicem8.job_material_bundles.delete` Delete a Job Material Bundle destructive
- `servicem8.job_material_bundles.get` Retrieve a Job Material Bundle read
- `servicem8.job_material_bundles.list` List all Job Material Bundles read
- `servicem8.job_material_bundles.update` Update a Job Material Bundle write

**Job materials 5**

- `servicem8.job_materials.create` Create a new Job Material write
- `servicem8.job_materials.delete` Delete a Job Material destructive
- `servicem8.job_materials.get` Retrieve a Job Material read
- `servicem8.job_materials.list` List all Job Materials read
- `servicem8.job_materials.update` Update a Job Material write

**Job payments 5**

- `servicem8.job_payments.create` Create a new Job Payment write
- `servicem8.job_payments.delete` Delete a Job Payment destructive
- `servicem8.job_payments.get` Retrieve a Job Payment read
- `servicem8.job_payments.list` List all Job Payments read
- `servicem8.job_payments.update` Update a Job Payment write

**Job queues 5**

- `servicem8.job_queues.create` Create a new Job Queue write
- `servicem8.job_queues.delete` Delete a Job Queue destructive
- `servicem8.job_queues.get` Retrieve a Job Queue read
- `servicem8.job_queues.list` List all Job Queues read
- `servicem8.job_queues.update` Update a Job Queue write

**Jobs 5**

- `servicem8.jobs.create` Create a new Job write
- `servicem8.jobs.delete` Delete a Job destructive
- `servicem8.jobs.get` Retrieve a Job read
- `servicem8.jobs.list` List all Jobs read
- `servicem8.jobs.update` Update a Job write

**Knowledge articles 5**

- `servicem8.knowledge_articles.create` Create a new Knowledge Article write
- `servicem8.knowledge_articles.delete` Delete a Knowledge Article destructive
- `servicem8.knowledge_articles.get` Retrieve a Knowledge Article read
- `servicem8.knowledge_articles.list` List all Knowledge Articles read
- `servicem8.knowledge_articles.update` Update a Knowledge Article write

**Locations 5**

- `servicem8.locations.create` Create a new Location write
- `servicem8.locations.delete` Delete a Location destructive
- `servicem8.locations.get` Retrieve a Location read
- `servicem8.locations.list` List all Locations read
- `servicem8.locations.update` Update a Location write

**Material bundles 5**

- `servicem8.material_bundles.create` Create a new Bundle write
- `servicem8.material_bundles.delete` Delete a Bundle destructive
- `servicem8.material_bundles.get` Retrieve a Bundle read
- `servicem8.material_bundles.list` List all Bundles read
- `servicem8.material_bundles.update` Update a Bundle write

**Materials 5**

- `servicem8.materials.create` Create a new Material write
- `servicem8.materials.delete` Delete a Material destructive
- `servicem8.materials.get` Retrieve a Material read
- `servicem8.materials.list` List all Materials read
- `servicem8.materials.update` Update a Material write

**Notes 5**

- `servicem8.notes.create` Create a new Note write
- `servicem8.notes.delete` Delete a Note destructive
- `servicem8.notes.get` Retrieve a Note read
- `servicem8.notes.list` List all Notes read
- `servicem8.notes.update` Update a Note write

**SMS templates 5**

- `servicem8.sms_templates.create` Create a new SMS Template write
- `servicem8.sms_templates.delete` Delete an SMS Template destructive
- `servicem8.sms_templates.get` Retrieve an SMS Template read
- `servicem8.sms_templates.list` List all SMS Templates read
- `servicem8.sms_templates.update` Update an SMS Template write

**Staff 5**

- `servicem8.staff.create` Create a new Staff Member write
- `servicem8.staff.delete` Delete a Staff Member destructive
- `servicem8.staff.get` Retrieve a Staff Member read
- `servicem8.staff.list` List all Staff Members read
- `servicem8.staff.update` Update a Staff Member write

**Staff messages 5**

- `servicem8.staff_messages.create` Create a new Staff Message write
- `servicem8.staff_messages.delete` Delete a Staff Message destructive
- `servicem8.staff_messages.get` Retrieve a Staff Message read
- `servicem8.staff_messages.list` List all Staff Messages read
- `servicem8.staff_messages.update` Update a Staff Message write

**Suppliers 5**

- `servicem8.suppliers.create` Create a new Supplier write
- `servicem8.suppliers.delete` Delete a Supplier destructive
- `servicem8.suppliers.get` Retrieve a Supplier read
- `servicem8.suppliers.list` List all Suppliers read
- `servicem8.suppliers.update` Update a Supplier write

**Tasks 5**

- `servicem8.tasks.create` Create a new Task write
- `servicem8.tasks.delete` Delete a Task destructive
- `servicem8.tasks.get` Retrieve a Task read
- `servicem8.tasks.list` List all Tasks read
- `servicem8.tasks.update` Update a Task write

**Tax rates 5**

- `servicem8.tax_rates.create` Create a new Tax Rate write
- `servicem8.tax_rates.delete` Delete a Tax Rate destructive
- `servicem8.tax_rates.get` Retrieve a Tax Rate read
- `servicem8.tax_rates.list` List all Tax Rates read
- `servicem8.tax_rates.update` Update a Tax Rate write

**Assets 4**

- `servicem8.assets.delete` Delete an Asset destructive
- `servicem8.assets.get` Retrieve an Asset read
- `servicem8.assets.list` List all Assets read
- `servicem8.assets.update` Update an Asset write

**Service templates 4**

- `servicem8.service_templates.delete` Soft-delete a ServiceTemplate destructive
- `servicem8.service_templates.get` Get a ServiceTemplate read
- `servicem8.service_templates.list` List ServiceTemplates read
- `servicem8.service_templates.upsert` Create or update a ServiceTemplate write

**Webhook subscriptions 4**

- `servicem8.webhook_subscriptions.create_event` Create or Update an Event Webhook Subscription write
- `servicem8.webhook_subscriptions.create_object` Create or Update an Object Webhook Subscription write
- `servicem8.webhook_subscriptions.delete` Delete a Webhook Subscription destructive
- `servicem8.webhook_subscriptions.list` List Webhook Subscriptions read

**Addon secrets 3**

- `servicem8.addon_secrets.delete` Delete a secret destructive
- `servicem8.addon_secrets.list` List secret names for an add-on read
- `servicem8.addon_secrets.set` Set a secret write

**Job templates 3**

- `servicem8.job_templates.create_job` Create a job from a template write
- `servicem8.job_templates.get` Retrieve a Job Template read
- `servicem8.job_templates.list` List all Job Templates read

**Search 3**

- `servicem8.search.general` Search across multiple object types read
- `servicem8.search.jobs_semantic` Semantic search for jobs read
- `servicem8.search.objects` Search within a specific object type read

**Addon SDK 2**

- `servicem8.addon_sdk.get_manifest_schema` Get the add-on manifest v1 JSON Schema read
- `servicem8.addon_sdk.whoami` Identify the authenticated account read

**Addons 2**

- `servicem8.addons.get` Fetch one add-on by slug read
- `servicem8.addons.list` List the account's add-ons read

**Emails 2**

- `servicem8.emails.get` Get one job email record read
- `servicem8.emails.list` List job email history read

**Job admin activities 2**

- `servicem8.job_admin_activities.get` Retrieve a Job Activity read
- `servicem8.job_admin_activities.list` List all Job Activities read

**Security roles 2**

- `servicem8.security_roles.get` Retrieve a Security Role read
- `servicem8.security_roles.list` List all Security Roles read

**SMS messages 2**

- `servicem8.sms_messages.get` Get one job SMS record read
- `servicem8.sms_messages.list` List job SMS history read

**Staff time events 2**

- `servicem8.staff_time_events.get` Retrieve a Staff Time Event read
- `servicem8.staff_time_events.list` List all Staff Time Events read

**Vendors 2**

- `servicem8.vendors.get` Retrieve a Vendor read
- `servicem8.vendors.list` List all Vendors read

**Accounts 1**

- `servicem8.accounts.provision` Provision a new ServiceM8 account write

**Addon deployments 1**

- `servicem8.addon_deployments.get` Poll deployment status read

**Addon log sessions 1**

- `servicem8.addon_log_sessions.create` Stream live logs for one add-on over SSE write

**Feed posts 1**

- `servicem8.feed_posts.create` Post a message to the activity feed write

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.

## More connectors like ServiceM8

Shares the most action names with

- [Samsara 16](https://actionlake.com/connectors/samsara)
- [Fergus 14](https://actionlake.com/connectors/fergus)
- [Onfleet 8](https://actionlake.com/connectors/onfleet)
- [Motive 3](https://actionlake.com/connectors/motive)
- [MachShip 1](https://actionlake.com/connectors/machship)

Joins with, on shared entities

- [ERPNext (Frappe) 7](https://actionlake.com/connectors/erpnext-frappe)
- [ServiceTitan 7](https://actionlake.com/connectors/servicetitan)
- [Acumatica Cloud ERP 6](https://actionlake.com/connectors/acumatica-cloud-erp)
- [Simpro 5](https://actionlake.com/connectors/simpro)
- [Odoo 5](https://actionlake.com/connectors/odoo)
- [Unified.to 5](https://actionlake.com/connectors/unified-to)

Browse

- [All Logistics & field service connectors](https://actionlake.com/connectors/category/logistics-and-field-service)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by ServiceM8; the name is the vendor's own. Counts are from the ServiceM8 service file, version 1.0.0.

## Give your agent ServiceM8 today.

[Connect ServiceM8 free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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

---

Source: https://actionlake.com/connectors/servicem8
More: https://actionlake.com/llms.txt
