BackCrew ServiceM8 MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SM8_MCP_MODE | No | MCP mode: read_only (safe default) or read_write. When read_only, no write actions are available. | read_only |
| SM8_MCP_PROFILE | No | Access profile: readonly-owner, office-ops, or admin. Determines which write actions are allowed when mode is read_write. | readonly-owner |
| SERVICEM8_API_KEY | Yes | Your ServiceM8 API key. Generate from Settings > API Keys in your ServiceM8 account. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_clientsB | List customer/client record. Required on create: name records, optionally filtered. Maps to GET /company.json. [tier: readonly-owner] |
| get_clientC | Get a single customer/client record. Required on create: name by UUID. Maps to GET /company/{uuid}.json. [tier: readonly-owner] |
| list_client_contactsA | List contact person for a client company records, optionally filtered. Maps to GET /companycontact.json. [tier: readonly-owner] |
| get_client_contactA | Get a single contact person for a client company by UUID. Maps to GET /companycontact/{uuid}.json. [tier: readonly-owner] |
| list_jobsB | List job (work order). Required on create: status records, optionally filtered. Maps to GET /job.json. [tier: readonly-owner] |
| get_jobA | Get a single job (work order). Required on create: status by UUID. Maps to GET /job/{uuid}.json. [tier: readonly-owner] |
| list_job_activitiesB | List scheduled booking or recorded time entry on a job records, optionally filtered. Maps to GET /jobactivity.json. [tier: readonly-owner] |
| get_job_activityC | Get a single scheduled booking or recorded time entry on a job by UUID. Maps to GET /jobactivity/{uuid}.json. [tier: readonly-owner] |
| list_job_contactsC | List contact person attached to a specific job records, optionally filtered. Maps to GET /jobcontact.json. [tier: readonly-owner] |
| get_job_contactA | Get a single contact person attached to a specific job by UUID. Maps to GET /jobcontact/{uuid}.json. [tier: readonly-owner] |
| list_job_materialsC | List line item (material/labour/service) on a job's quote or invoice. Required on create: quantity records, optionally filtered. Maps to GET /jobmaterial.json. [tier: readonly-owner] |
| get_job_materialA | Get a single line item (material/labour/service) on a job's quote or invoice. Required on create: quantity by UUID. Maps to GET /jobmaterial/{uuid}.json. [tier: readonly-owner] |
| list_job_paymentsA | List payment recorded against a job. Financially sensitive — kept at admin tier rather than everyday office-ops records, optionally filtered. Maps to GET /jobpayment.json. [tier: readonly-owner] |
| get_job_paymentA | Get a single payment recorded against a job. Financially sensitive — kept at admin tier rather than everyday office-ops by UUID. Maps to GET /jobpayment/{uuid}.json. [tier: readonly-owner] |
| list_staff_members | List employee/technician record — includes login email and location tracking fields, so kept at admin tier rather than everyday office-ops. Required on create: first, last records, optionally filtered. Maps to GET /staff.json. [tier: readonly-owner] |
| get_staff_memberA | Get a single employee/technician record — includes login email and location tracking fields, so kept at admin tier rather than everyday office-ops. Required on create: first, last by UUID. Maps to GET /staff/{uuid}.json. [tier: readonly-owner] |
| list_materialsB | List catalog material, product, or labour rate. Required on create: name records, optionally filtered. Maps to GET /material.json. [tier: readonly-owner] |
| get_materialC | Get a single catalog material, product, or labour rate. Required on create: name by UUID. Maps to GET /material/{uuid}.json. [tier: readonly-owner] |
| list_job_categoriesA | List job category used to classify and organize jobs. Required on create: name records, optionally filtered. Maps to GET /category.json. [tier: readonly-owner] |
| get_job_category | Get a single job category used to classify and organize jobs. Required on create: name by UUID. Maps to GET /category/{uuid}.json. [tier: readonly-owner] |
| list_job_queuesC | List dispatch queue jobs can be placed into for assignment records, optionally filtered. Maps to GET /queue.json. [tier: readonly-owner] |
| get_job_queue | Get a single dispatch queue jobs can be placed into for assignment by UUID. Maps to GET /queue/{uuid}.json. [tier: readonly-owner] |
| list_suppliersC | List vendor/supplier record records, optionally filtered. Maps to GET /supplier.json. [tier: readonly-owner] |
| get_supplierA | Get a single vendor/supplier record by UUID. Maps to GET /supplier/{uuid}.json. [tier: readonly-owner] |
| list_tax_ratesA | List configured tax rate records, optionally filtered. Maps to GET /taxrate.json. [tier: readonly-owner] |
| get_tax_rate | Get a single configured tax rate by UUID. Maps to GET /taxrate/{uuid}.json. [tier: readonly-owner] |
| list_notes | List notes attached to jobs, clients, or other records. Maps to GET /note.json. [tier: readonly-owner] |
| list_tasks | List to-do task, optionally linked to a job/client. Required on create: name records, optionally filtered. Maps to GET /task.json. [tier: readonly-owner] |
| get_task | Get a single to-do task, optionally linked to a job/client. Required on create: name by UUID. Maps to GET /task/{uuid}.json. [tier: readonly-owner] |
| list_attachmentsA | List attachments (photos, quotes, invoices, documents) linked to jobs, clients, or other records. Maps to GET /attachment.json. [tier: readonly-owner] |
| list_inbox_messagesC | List inbox messages (incoming leads/inquiries). Maps to GET /inboxmessage.json. [tier: readonly-owner] |
| get_inbox_messageC | Get a single inbox message. Maps to GET /inboxmessage/{uuid}.json. [tier: readonly-owner] |
| list_job_templatesB | List job templates configured for the account (e.g. a standard 'Quarterly Pest Treatment' template). Maps to GET /jobtemplate.json. [tier: readonly-owner] |
| get_job_template | Get a single job template. Maps to GET /jobtemplate/{uuid}.json. [tier: readonly-owner] |
| searchA | Free-text search across all ServiceM8 record types. Maps to GET /search.json. [tier: readonly-owner] |
| search_by_typeA | Free-text search scoped to one record type (e.g. 'job', 'company'). Maps to GET /search/{objectType}.json. [tier: readonly-owner] |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
Every tool maps to a distinct resource/action pair (list vs get, client vs job vs material, etc.), and even similar resources like client contacts and job contacts are clearly differentiated in descriptions. search and search_by_type are also distinct enough from the list tools.
The naming follows a consistent list_<plural_resource> / get_<singular_resource> convention with snake_case throughout, and search/search_by_type use the same verb-first style. There are no mixed casing or varying verb patterns.
At 28 tools, the set exceeds the 25+ threshold and feels heavy, especially since most are mechanical list/get pairs for the same entity types. The broad read-only scope explains the count, but it is more than an agent typically needs for a single server.
The server covers read operations for many ServiceM8 entities, but there are no create/update/delete tools at all, so any workflow that needs to modify a job, client, contact, or payment dead-ends. Some resources also have incomplete get/list coverage (e.g., staff has get but no list; attachments list only).