# Service Autopilot MCP tools

> Every Service Autopilot MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/service-autopilot

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

14 tools for Service Autopilot on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Service Autopilot office user account
- Integration page: https://cotlet.dev/integrations/service-autopilot-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `service-autopilot_search_clients` | read | Find clients and leads by name, address, email or phone. |
| `service-autopilot_get_client` | read | Client account history: contact details, jobs, estimates, invoices and notes. |
| `service-autopilot_list_jobs` | read | Scheduled and completed jobs in a date range, with client, address, crew and price. |
| `service-autopilot_get_route` | read | A crew or technician route for one day: stops in route order with client and address. |
| `service-autopilot_list_estimates` | read | Estimates with client, total, date sent and status. |
| `service-autopilot_list_invoices` | read | Invoices with client, amount, due date, paid or unpaid and days past due. |
| `service-autopilot_add_client` | write | New client or lead with contact details and a service address. |
| `service-autopilot_create_job` | write | One-time or repeating job for a client, assigned to a crew. |
| `service-autopilot_reschedule_job` | write | Move a scheduled visit to another day or crew. |
| `service-autopilot_add_job_note` | write | Add a note to a job. |
| `service-autopilot_create_estimate` | write | Estimate for a client from line items. Nothing is sent until you call send_estimate. |
| `service-autopilot_send_estimate` | write | Email an estimate to the client. |
| `service-autopilot_create_invoice` | write | Invoice a client for completed jobs, optionally emailing it right away. |
| `service-autopilot_send_text` | write | Text message to a client with 2-Way Texting. |

## Search clients

MCP tool: `service-autopilot_search_clients`

Access: read.

Returns matching clients and leads with ID, name, service address and type. Pass client_id to get_client, create_job or create_estimate. Results hold up to 100 clients.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `query` | string | yes | Name, street address, email or phone. |
| `type` | enum | no | client, lead or all. Default: all. |
| `limit` | integer | no | 1 to 100. Default: 25. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_search_clients",
    "arguments": {
      "query": "query"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "clients": [
      {
        "client_id": "4410382",
        "name": "Dana Henderson",
        "type": "client",
        "address": "12 Oak Lane",
        "phone": "555-0142"
      }
    ]
  },
  "isError": false
}
```

## Get client

MCP tool: `service-autopilot_get_client`

Access: read.

Returns one client with contact details, service address, recent jobs, estimates, invoices and notes, the same history the account page shows. Use it before replying to a client or billing one.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from search_clients. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_get_client",
    "arguments": {
      "client_id": "client_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "client_id": "4410382",
    "name": "Dana Henderson",
    "address": "12 Oak Lane",
    "email": "dana@example.com",
    "jobs": [
      {
        "job_id": "9827514",
        "service": "Mowing",
        "next_visit": "2026-10-13"
      }
    ],
    "estimates": [
      {
        "estimate_id": "E-20418",
        "total": "450.00",
        "status": "sent"
      }
    ],
    "invoices": [
      {
        "invoice_id": "I-70231",
        "amount": "45.00",
        "status": "paid"
      }
    ],
    "notes": [
      "Side gate code 1234"
    ]
  },
  "isError": false
}
```

## List jobs

MCP tool: `service-autopilot_list_jobs`

Access: read.

Lists visits in a date range, ordered by date, with client, address, crew and price. Filter by crew or by status. Pass job_id to reschedule_job or add_job_note.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day. |
| `to` | date | no | Last day. Default: same as from. |
| `crew` | string | no | Crew or technician name. |
| `status` | enum | no | scheduled, completed or all. Default: all. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_list_jobs",
    "arguments": {
      "from": "2026-10-01"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "jobs": [
      {
        "job_id": "9827514",
        "date": "2026-10-13",
        "client": "Dana Henderson",
        "address": "12 Oak Lane",
        "service": "Mowing",
        "crew": "Crew 2",
        "price": "45.00",
        "status": "scheduled"
      }
    ]
  },
  "isError": false
}
```

## Get route

MCP tool: `service-autopilot_get_route`

Access: read.

Returns the stops of one crew on one day in the order the route is set, each with client, address, service and price. It reads the route as Service Autopilot shows it and does not change it.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `crew` | string | yes | Crew or technician name. |
| `date` | date | yes | Route day. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_get_route",
    "arguments": {
      "crew": "crew",
      "date": "2026-10-01"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "crew": "Crew 1",
    "date": "2026-10-13",
    "stops": [
      {
        "order": 1,
        "client": "Dana Henderson",
        "address": "12 Oak Lane",
        "service": "Mowing",
        "price": "45.00"
      },
      {
        "order": 2,
        "client": "Lee Park",
        "address": "40 Elm Street",
        "service": "Mowing",
        "price": "60.00"
      }
    ]
  },
  "isError": false
}
```

## List estimates

MCP tool: `service-autopilot_list_estimates`

Access: read.

Lists estimates, newest first, with client, total and whether the estimate was sent. Filter by client or creation date. Pass estimate_id to send_estimate.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | no | Only this client. |
| `since` | date | no | Only estimates created on or after this date. |
| `limit` | integer | no | 1 to 100. Default: 25. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_list_estimates",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimates": [
      {
        "estimate_id": "E-20418",
        "client": "Dana Henderson",
        "total": "450.00",
        "status": "sent",
        "sent_at": "2026-10-08"
      }
    ]
  },
  "isError": false
}
```

## List invoices

MCP tool: `service-autopilot_list_invoices`

Access: read.

Lists invoices with client, amount, due date and status. Unpaid invoices come first by default, oldest due date first. Filter by client or date. Amounts are in your account currency.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | unpaid, paid or all. Default: unpaid. |
| `client_id` | string | no | Only this client. |
| `since` | date | no | Only invoices dated on or after this date. |
| `limit` | integer | no | 1 to 200. Default: 50. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_list_invoices",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "invoices": [
      {
        "invoice_id": "I-70198",
        "client": "Lee Park",
        "amount": "120.00",
        "due_date": "2026-09-05",
        "status": "unpaid",
        "days_past_due": 36
      }
    ]
  },
  "isError": false
}
```

## Add client

MCP tool: `service-autopilot_add_client`

Access: write.

Creates a client or a lead with a service address and optional contact details and notes. It sends nothing to the client, so it runs without asking first and the record can be edited or removed in the app.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes | Person or company name. |
| `address` | string | yes | Service address. |
| `email` | string | no | Client email. |
| `phone` | string | no | Mobile number. |
| `type` | enum | no | client or lead. Default: client. |
| `notes` | string | no | Gate codes, pets, special instructions. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_add_client",
    "arguments": {
      "name": "Jane Doe",
      "address": "address"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "client_id": "4410382",
    "name": "Dana Henderson",
    "type": "client",
    "address": "12 Oak Lane"
  },
  "isError": false
}
```

## Create job

MCP tool: `service-autopilot_create_job`

Access: write.

Puts a job on the calendar for a client, one time or repeating weekly, every other week or monthly. The service name must match one set up in your account. It sends nothing to the client, so it runs without asking first; reschedule_job fixes a wrong date.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from search_clients. |
| `service` | string | yes | Service name as set up in your account, e.g. Mowing. |
| `start_date` | date | yes | First visit. |
| `recurrence` | enum | no | one_time, weekly, every_other_week or monthly. Default: one_time. |
| `crew` | string | no | Crew or technician name. |
| `price` | string | no | Price per visit, e.g. 45.00. |
| `instructions` | string | no | Special instructions for the visit. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_create_job",
    "arguments": {
      "client_id": "4410382",
      "service": "Mowing",
      "start_date": "2026-10-13",
      "recurrence": "weekly",
      "crew": "Crew 2",
      "price": "45.00",
      "instructions": "Side gate code 1234, back yard first."
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "9827514",
    "client_id": "4410382",
    "service": "Mowing",
    "recurrence": "weekly",
    "next_visit": "2026-10-13",
    "crew": "Crew 2",
    "price": "45.00",
    "status": "scheduled"
  },
  "isError": false
}
```

## Reschedule job

MCP tool: `service-autopilot_reschedule_job`

Access: write.

Moves one scheduled visit to a new date, and to another crew if you name one. It changes the calendar only and one more call moves it back, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job ID from list_jobs. |
| `date` | date | yes | New day. |
| `crew` | string | no | New crew or technician. Default: unchanged. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_reschedule_job",
    "arguments": {
      "job_id": "9827514",
      "date": "2026-10-16"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "9827514",
    "date": "2026-10-16",
    "crew": "Crew 2",
    "status": "scheduled"
  },
  "isError": false
}
```

## Add job note

MCP tool: `service-autopilot_add_job_note`

Access: write.

Adds a text note to one job. It reaches no client and runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `job_id` | string | yes | Job ID from list_jobs. |
| `note` | string | yes | Note text. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_add_job_note",
    "arguments": {
      "job_id": "job_8c41d2",
      "note": "note"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "9827514",
    "note_id": "n_3301",
    "status": "added"
  },
  "isError": false
}
```

## Create estimate

MCP tool: `service-autopilot_create_estimate`

Access: write.

Creates an estimate for a client from line items and returns its total. The line items add up to the total. It sends nothing to the client, so it runs without asking first; send_estimate delivers it.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from search_clients. |
| `items` | object[] | yes | Line items, each with service, quantity and price. |
| `notes` | string | no | Message shown on the estimate. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_create_estimate",
    "arguments": {
      "client_id": "4410382",
      "items": [
        {
          "service": "Spring cleanup",
          "quantity": 1,
          "price": "250.00"
        },
        {
          "service": "Mulch",
          "quantity": 6,
          "price": "35.00"
        }
      ],
      "notes": "Optional: edging along the front beds, $60.00."
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimate_id": "E-20418",
    "client_id": "4410382",
    "total": "450.00",
    "status": "created"
  },
  "isError": false
}
```

## Send estimate

MCP tool: `service-autopilot_send_estimate`

Access: write. Confirm: waits for the user's OK before it runs.

Emails one estimate to the client on file. Service Autopilot lists estimates and proposals on the Pro plan. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `estimate_id` | string | yes | Estimate ID from list_estimates or create_estimate. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_send_estimate",
    "arguments": {
      "estimate_id": "estimate_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimate_id": "E-20418",
    "status": "sent",
    "sent_to": "dana@example.com"
  },
  "isError": false
}
```

## Create invoice

MCP tool: `service-autopilot_create_invoice`

Access: write. Confirm: waits for the user's OK before it runs.

Bills a client for completed jobs, all unbilled ones by default, and returns the invoice total. Set send to email it to the client. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from search_clients. |
| `job_ids` | string[] | no | Completed jobs to bill. Default: all unbilled completed jobs. |
| `send` | boolean | no | Email the invoice to the client. Default: false. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_create_invoice",
    "arguments": {
      "client_id": "client_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "invoice_id": "I-70231",
    "client_id": "4410382",
    "jobs": 4,
    "amount": "180.00",
    "sent": true
  },
  "isError": false
}
```

## Send text

MCP tool: `service-autopilot_send_text`

Access: write. Confirm: waits for the user's OK before it runs.

Sends a text to one client through Two-Way Texting, a paid add-on for Pro and Pro Plus members that the pricing page includes in Elite, so the call fails on accounts without it. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from search_clients. |
| `message` | string | yes | Text message body. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "service-autopilot_send_text",
    "arguments": {
      "client_id": "client_8c41d2",
      "message": "message"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "client_id": "4410382",
    "status": "sent",
    "sent_at": "2026-10-12T17:30:00-04:00"
  },
  "isError": false
}
```
