MCP tools reference

Workiz MCP tools

15 tools for Workiz on the Cotlet MCP server. Your agent picks them from tools/list.

MCP server
https://cotlet.dev/mcp/v1
Connects with
Your own Workiz account (the permissions of your role apply)
Integration page
Workiz
Workiz Endpoints
Endpoint Access Description
workiz_list_jobs read Jobs by scheduled date, with status, client, address, assigned techs and amount due.
workiz_get_job read Full job: client, address, time window, job type, notes, items, total, amount due and payments.
workiz_get_schedule read Jobs and time off per technician for a day or range, as on the Workiz calendar.
workiz_list_leads read Leads with status, source, client details and assigned team member.
workiz_list_clients read Search clients by name, phone, email or address, with past jobs and balance due.
workiz_list_estimates read Estimates with client, total, status and the date they were sent.
workiz_list_invoices read Invoices with job, client, total, amount due and due date.
workiz_create_job write New job for an existing or new client, with job type, time window and notes.
workiz_reschedule_job write Move a job to a new time window. Changes the client's appointment.
workiz_assign_job write Assign or unassign team members on a job.
workiz_create_estimate write Draft estimate for a client with items from your Price Book. Nothing is sent yet.
workiz_send_estimate write Email or text an estimate to the client, with a link to approve it.
workiz_create_invoice write Invoice for a job with its items and total. Nothing is sent yet.
workiz_send_invoice write Email or text an invoice to the client, with a link to pay online.
workiz_record_payment write Record a payment you already received on a job. Does not charge a card.

List jobs

read

MCP tool workiz_list_jobs

Returns jobs in a date range, newest first, with status, client, address, assigned team members, total and amount due. Pages hold up to 100 jobs; pass next_cursor back as cursor for the next page. Filter by status or by team member to narrow the list.

Parameters

Parameters: list_jobs
NameTypeDescription
from date First scheduled date. Default: 14 days ago.
to date Last scheduled date. Default: today.
status string[] Job statuses to include, e.g. Submitted, In progress, Done, Canceled.
tech_id string Only jobs assigned to this team member.
limit integer 1 to 100. Default: 50.
cursor string Next page cursor from the previous call.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_list_jobs",
    "arguments": {}
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "jobs": [
      {
        "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
        "status": "Done",
        "job_type": "Water heater install",
        "scheduled_start": "2026-10-09T09:00:00-07:00",
        "client": {
          "client_id": "cl_5521",
          "name": "Dana Whitfield"
        },
        "address": "12 Oak St, Sacramento, CA",
        "techs": [
          "Mike R."
        ],
        "total": "480.00",
        "amount_due": "480.00"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}

Get job

read

MCP tool workiz_get_job

Returns one job with everything on its page: client, address, time window, job type, notes, line items, total, amount due and the payments recorded so far. Use it before invoicing or recording a payment.

Parameters

Parameters: get_job
NameTypeDescription
job_id required string Job UUID from list_jobs.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_get_job",
    "arguments": {
      "job_id": "job_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
    "status": "Done",
    "job_type": "Water heater install",
    "client": {
      "client_id": "cl_5521",
      "name": "Dana Whitfield",
      "phone": "(555) 010-2231"
    },
    "address": "12 Oak St, Sacramento, CA",
    "window": {
      "start": "2026-10-09T09:00:00-07:00",
      "end": "2026-10-09T11:00:00-07:00"
    },
    "notes": "Gas line on the left wall.",
    "items": [
      {
        "name": "40 gal water heater",
        "quantity": 1,
        "price": "380.00"
      },
      {
        "name": "Install labor",
        "quantity": 1,
        "price": "100.00"
      }
    ],
    "total": "480.00",
    "amount_due": "480.00",
    "payments": []
  },
  "isError": false
}

MCP tool workiz_get_schedule

Returns each team member with their jobs and time off for the days you ask, ordered by start time, so your agent can see who has open slots. Time off is the future time off set in Workiz.

Parameters

Parameters: get_schedule
NameTypeDescription
from required date First day.
to date Last day. Default: same as from.
tech_ids string[] Limit to these team members. Default: everyone.

tools/call

JSON-RPC

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

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "days": [
      {
        "date": "2026-10-12",
        "techs": [
          {
            "tech_id": "u_204",
            "name": "Mike R.",
            "jobs": [
              {
                "job_id": "3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48",
                "start": "2026-10-12T09:00:00-07:00",
                "end": "2026-10-12T11:00:00-07:00",
                "job_type": "Drain cleaning"
              }
            ],
            "time_off": []
          }
        ]
      }
    ]
  },
  "isError": false
}

List leads

read

MCP tool workiz_list_leads

Returns leads, newest first, with status, source, contact details and the assigned team member. Open is the default, so converted and lost leads appear only when you ask for them. Pages hold up to 100 leads.

Parameters

Parameters: list_leads
NameTypeDescription
status enum open, converted or lost. Default: open.
since date Only leads created on or after this date.
limit integer 1 to 100. Default: 50.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_list_leads",
    "arguments": {}
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "leads": [
      {
        "lead_id": "ld_8841",
        "status": "open",
        "source": "Website",
        "name": "Priya Nair",
        "phone": "(555) 010-7714",
        "created_at": "2026-10-10T08:12:00-07:00",
        "assigned_to": null
      }
    ],
    "next_cursor": null
  },
  "isError": false
}

MCP tool workiz_list_clients

Searches your Workiz clients and returns matches with contact details, their past jobs and the balance due. Use the client_id in create_job, create_estimate and the other tools.

Parameters

Parameters: list_clients
NameTypeDescription
query string Name, phone, email or address.
limit integer 1 to 100. Default: 25.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_list_clients",
    "arguments": {}
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "clients": [
      {
        "client_id": "cl_5521",
        "name": "Dana Whitfield",
        "phone": "(555) 010-2231",
        "email": "dana@example.com",
        "address": "12 Oak St, Sacramento, CA",
        "jobs": 3,
        "balance_due": "480.00"
      }
    ]
  },
  "isError": false
}

MCP tool workiz_list_estimates

Returns estimates, newest first, with client, total, status and the date sent. Filter by status to find the ones still waiting for an answer. Pages hold up to 100 estimates.

Parameters

Parameters: list_estimates
NameTypeDescription
status enum draft, sent, approved or declined. Default: all.
since date Only estimates created on or after this date.
limit integer 1 to 100. Default: 50.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_list_estimates",
    "arguments": {}
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimates": [
      {
        "estimate_id": "est_1187",
        "client": "Priya Nair",
        "total": "1,250.00",
        "status": "sent",
        "sent_at": "2026-10-01T10:15:00-07:00"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}

MCP tool workiz_list_invoices

Returns invoices, newest first, with the job, client, total, amount due and due date. Unpaid is the default. Pages hold up to 100 invoices.

Parameters

Parameters: list_invoices
NameTypeDescription
status enum unpaid, partially_paid or paid. Default: unpaid.
since date Only invoices created on or after this date.
limit integer 1 to 100. Default: 50.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_list_invoices",
    "arguments": {}
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "invoices": [
      {
        "invoice_id": "inv_30214",
        "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
        "client": "Dana Whitfield",
        "total": "480.00",
        "amount_due": "240.00",
        "due_date": "2026-10-23",
        "status": "partially_paid"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}

Create job

write Confirm

MCP tool workiz_create_job

Creates a job for an existing client (client_id) or a new one (client object). Job type must be one of your Workiz job types. The job books an appointment for the client at the time you give. Returns the new job_id. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: create_job
NameTypeDescription
client_id string Existing client from list_clients. Or pass client below.
client object New client: first_name, last_name, phone, email, address.
job_type required string One of your Workiz job types.
start required datetime ISO 8601 with time zone.
end datetime End of the time window.
notes string Job notes for the tech.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_create_job",
    "arguments": {
      "client_id": "cl_5521",
      "job_type": "Water heater install",
      "start": "2026-10-14T09:00:00-07:00",
      "end": "2026-10-14T11:00:00-07:00",
      "notes": "From lead ld_8841: tank leaking at the base."
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "9e2b7d14-6c35-4a08-8f1d-3b5a0c7e92d6",
    "status": "Submitted",
    "job_type": "Water heater install",
    "client_id": "cl_5521",
    "start": "2026-10-16T09:00:00-07:00",
    "notes": "Gas line on the left wall."
  },
  "isError": false
}

Reschedule job

write Confirm

MCP tool workiz_reschedule_job

Moves one job to a new start and, if given, a new end. The job keeps its assigned team members and its status. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: reschedule_job
NameTypeDescription
job_id required string Job UUID from list_jobs.
start required datetime New start, ISO 8601 with time zone.
end datetime New end.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_reschedule_job",
    "arguments": {
      "job_id": "3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48",
      "start": "2026-10-13T09:00:00-07:00",
      "end": "2026-10-13T11:00:00-07:00"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "3a9d41f2-85c0-4b7e-b6d2-91e7f0a35c48",
    "status": "Submitted",
    "start": "2026-10-13T09:00:00-07:00",
    "end": "2026-10-13T11:00:00-07:00",
    "previous_start": "2026-10-12T09:00:00-07:00"
  },
  "isError": false
}

Assign job

write

MCP tool workiz_assign_job

Adds team members to a job, or replaces the current ones when replace is true. It runs without asking first: it sends nothing to the client and one more call changes the assignment back.

Parameters

Parameters: assign_job
NameTypeDescription
job_id required string Job UUID from list_jobs.
tech_ids required string[] Team members to assign.
replace boolean Remove current assignees first. Default: false.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_assign_job",
    "arguments": {
      "job_id": "job_8c41d2",
      "tech_ids": [
        "tech ids"
      ]
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
    "techs": [
      {
        "tech_id": "u_204",
        "name": "Mike R."
      }
    ]
  },
  "isError": false
}

MCP tool workiz_create_estimate

Creates an estimate in Draft for one client. Item names match items in your Workiz Price Book. Nothing is sent to the client until send_estimate runs, so this call runs without asking.

Parameters

Parameters: create_estimate
NameTypeDescription
client_id required string Client from list_clients.
items required object List of {name, quantity, price}; names match Price Book items.
notes string Note shown to the client.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_create_estimate",
    "arguments": {
      "client_id": "client_8c41d2",
      "items": "items"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimate_id": "est_1192",
    "client_id": "cl_5521",
    "status": "draft",
    "items": [
      {
        "name": "Tankless water heater",
        "quantity": 1,
        "price": "1,250.00"
      }
    ],
    "total": "1,250.00"
  },
  "isError": false
}

Send estimate

write Confirm

MCP tool workiz_send_estimate

Sends the estimate by email, text or both, with a link to view and approve it in the Workiz client portal. An unsent estimate becomes Pending; approval in the portal moves it to Approved. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: send_estimate
NameTypeDescription
estimate_id required string Estimate from list_estimates or create_estimate.
via enum email, sms or both. Default: email.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_send_estimate",
    "arguments": {
      "estimate_id": "estimate_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "estimate_id": "est_1187",
    "status": "pending",
    "sent_via": "email",
    "sent_at": "2026-10-11T09:00:00-07:00"
  },
  "isError": false
}

MCP tool workiz_create_invoice

Creates an invoice from a job, with the job's items and total. Nothing is sent to the client until send_invoice runs, so this call runs without asking. Returns the invoice_id.

Parameters

Parameters: create_invoice
NameTypeDescription
job_id required string Job UUID from list_jobs.
due_date date Payment due date.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_create_invoice",
    "arguments": {
      "job_id": "job_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "invoice_id": "inv_30214",
    "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
    "items": [
      {
        "name": "40 gal water heater",
        "quantity": 1,
        "price": "380.00"
      },
      {
        "name": "Install labor",
        "quantity": 1,
        "price": "100.00"
      }
    ],
    "total": "480.00",
    "amount_due": "480.00",
    "due_date": "2026-10-23",
    "status": "unsent"
  },
  "isError": false
}

Send invoice

write Confirm

MCP tool workiz_send_invoice

Sends the invoice by email, text or both, with a link to the Workiz client portal. The client sees the amount due there. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: send_invoice
NameTypeDescription
invoice_id required string Invoice from list_invoices or create_invoice.
via enum email, sms or both. Default: email.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_send_invoice",
    "arguments": {
      "invoice_id": "inv_30214",
      "via": "email"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "invoice_id": "inv_30214",
    "status": "sent",
    "sent_via": "email",
    "amount_due": "480.00",
    "sent_at": "2026-10-11T18:00:00-07:00"
  },
  "isError": false
}

Record payment

write Confirm

MCP tool workiz_record_payment

Records a payment you already received on a job, as cash, check or credit, with an optional reference such as a check number. It does not charge a card. Returns the job total and the amount still due. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: record_payment
NameTypeDescription
job_id required string Job UUID from list_jobs.
amount required string Amount, e.g. 240.00.
method required enum cash, check or credit.
paid_at datetime When it was paid. Default: now.
reference string Check number or confirmation number.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "workiz_record_payment",
    "arguments": {
      "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
      "amount": "240.00",
      "method": "check",
      "paid_at": "2026-10-09T15:30:00-07:00",
      "reference": "1042"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "job_id": "7c1e5a90-2b4d-4f6e-9a31-0d8e2c4b6f17",
    "payment_id": "pay_88213",
    "amount": "240.00",
    "method": "check",
    "reference": "1042",
    "job_total": "480.00",
    "amount_due": "240.00",
    "status": "recorded"
  },
  "isError": false
}