Kickserv MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi
Look up Kickserv customers, jobs, notes and time entries, and create jobs, tasks and charges.
20 tools: 9 can delete or cancel things and 11 only read.
Scanned Oct 21, 2026
- Deletes or cancels9Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads11Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http kickserv https://kickserv.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "kickserv_log_time_entry" destructive (destructiveHint: true), and its name says "log", a word for reading.
What this check looks forMatched text
annotations: {"destructiveHint":true}; The name "kickserv_log_time_entry" says "log": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
20 tools
Deletes or cancels 9Claude Code: deny
kickserv_add_customer_noteWRITE: add a note to a customer.No findings
Why it is in this group
- The name "kickserv_add_customer_note" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: add a note to a customer. Set `public` to true to make it visible to the customer. Kickserv: POST /{account}/customers/{customer_number}/notes.xml.
Annotations the server declares
- title: Add a note to a customer
- destructiveHint: true
kickserv_add_job_chargeWRITE: add a charge (line item — a product, service or part) to a job.No findings
Why it is in this group
- The name "kickserv_add_job_charge" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: add a charge (line item — a product, service or part) to a job. This changes the job's estimate/invoice total; it does NOT charge the customer's card. Pick `item_id` from kickserv_list_items. Kickserv: POST /{account}/jobs/{job_number}/job_charges.xml.
Annotations the server declares
- title: Add a charge to a job
- destructiveHint: true
kickserv_add_job_noteWRITE: add a note to a job.No findings
Why it is in this group
- The name "kickserv_add_job_note" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: add a note to a job. Set `public` to true to make it visible to the customer. Kickserv: POST /{account}/jobs/{job_number}/notes.xml.
Annotations the server declares
- title: Add a note to a job
- destructiveHint: true
kickserv_create_customerWRITE: create a new customer.No findings
Why it is in this group
- The name "kickserv_create_customer" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: create a new customer. Kickserv assigns the customer number. Kickserv: POST /{account}/customers.xml.
Annotations the server declares
- title: Create a customer
- destructiveHint: true
kickserv_create_jobWRITE: create a job (work order) for a customer.No findings
Why it is in this group
- The name "kickserv_create_job" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: create a job (work order) for a customer. `customer_id` is the customer's internal `id` (from kickserv_get_customer), not the customer number; `job_type_id` is the job category. Set `estimate` to create it as an estimate. Kickserv: POST /{account}/jobs.xml.
Annotations the server declares
- title: Create a job
- destructiveHint: true
kickserv_create_taskWRITE: create a task (appointment / to-do) on a job and optionally assign employees.No findings
Why it is in this group
- The name "kickserv_create_task" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: create a task (appointment / to-do) on a job and optionally assign employees. `job_id` is the job's internal `id` (from kickserv_get_job), not the job number. Kickserv: POST /{account}/tasks.xml.
Annotations the server declares
- title: Create a task
- destructiveHint: true
kickserv_log_time_entryWRITE: log hours worked by an employee on a job.1 finding
Why it is in this group
- The name "kickserv_log_time_entry" says "log": a word for reading.
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Findings
- Warn
The server marks "kickserv_log_time_entry" destructive (destructiveHint: true), and its name says "log", a word for reading.
What this check looks forMatched text
annotations: {"destructiveHint":true}; The name "kickserv_log_time_entry" says "log": a word for reading.
Description, as the server wrote it WRITE: log hours worked by an employee on a job. `employee_id` is the employee's `id` from kickserv_list_employees. Kickserv: POST /{account}/jobs/{job_number}/time_entries.xml.
Annotations the server declares
- title: Log time on a job
- destructiveHint: true
kickserv_update_customerWRITE: update fields on an existing customer.No findings
Why it is in this group
- The name "kickserv_update_customer" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: update fields on an existing customer. Only the fields you pass change. Balances, credit limit and custom fields are not settable here. Kickserv: PATCH /{account}/customers/{customer_number}.xml.
Annotations the server declares
- title: Update a customer
- destructiveHint: true
kickserv_update_jobWRITE: update an existing job — reschedule it, rename it, change its description, category or custom job status, or reassign employees (employee_ids replaces the assignment).No findings
Why it is in this group
- The name "kickserv_update_job" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: update an existing job — reschedule it, rename it, change its description, category or custom job status, or reassign employees (employee_ids replaces the assignment). Totals, tax and payment fields are not settable here. Kickserv: PATCH /{account}/jobs/{job_number}.xml.
Annotations the server declares
- title: Update a job
- destructiveHint: true
Only reads 11Claude Code: allow
kickserv_get_customerFetch one customer by customer number, optionally with related contacts, jobs, tasks and notes.No findings
Why it is in this group
- The name "kickserv_get_customer" says "get": a word for reading.
Description, as the server wrote it Fetch one customer by customer number, optionally with related contacts, jobs, tasks and notes. The result's `id` is what job/task create calls need as `customer_id`. Kickserv: GET /{account}/customers/{customer_number}.xml.
Annotations the server declares
- title: Get a customer
- readOnlyHint: true
kickserv_get_jobFetch one job by job number, optionally with its customer, assigned employees, job charges (line items), time entries and notes.No findings
Why it is in this group
- The name "kickserv_get_job" says "get": a word for reading.
Description, as the server wrote it Fetch one job by job number, optionally with its customer, assigned employees, job charges (line items), time entries and notes. Kickserv: GET /{account}/jobs/{job_number}.xml.
Annotations the server declares
- title: Get a job
- readOnlyHint: true
kickserv_get_taskFetch one task (appointment / to-do attached to a job) by id.No findings
Why it is in this group
- The name "kickserv_get_task" says "get": a word for reading.
Description, as the server wrote it Fetch one task (appointment / to-do attached to a job) by id. Kickserv: GET /{account}/tasks/{task_id}.xml.
Annotations the server declares
- title: Get a task
- readOnlyHint: true
kickserv_list_customer_jobsList the jobs for one customer, 30 per page.No findings
Why it is in this group
- The name "kickserv_list_customer_jobs" says "list": a word for reading.
Description, as the server wrote it List the jobs for one customer, 30 per page. Kickserv: GET /{account}/customers/{customer_number}/jobs.xml.
Annotations the server declares
- title: List a customer's jobs
- readOnlyHint: true
kickserv_list_customer_notesList the notes on one customer.No findings
Why it is in this group
- The name "kickserv_list_customer_notes" says "list": a word for reading.
Description, as the server wrote it List the notes on one customer. Kickserv: GET /{account}/customers/{customer_number}/notes.xml.
Annotations the server declares
- title: List a customer's notes
- readOnlyHint: true
kickserv_list_customersList or search customers, 30 per page.No findings
Why it is in this group
- The name "kickserv_list_customers" says "list": a word for reading.
Description, as the server wrote it List or search customers, 30 per page. Every filter is an exact match on that field. Use `only` to keep the response small. Kickserv: GET /{account}/customers.xml.
Annotations the server declares
- title: List customers
- readOnlyHint: true
kickserv_list_employeesList all employees (technicians and office staff), active and inactive.No findings
Why it is in this group
- The name "kickserv_list_employees" says "list": a word for reading.
Description, as the server wrote it List all employees (technicians and office staff), active and inactive. Use their `id` for job/task assignment and time entries, and `employee_number` to filter jobs. Kickserv: GET /{account}/employees.xml.
Annotations the server declares
- title: List employees
- readOnlyHint: true
kickserv_list_itemsList products/services (the price list used for job charges), 30 per page.No findings
Why it is in this group
- The name "kickserv_list_items" says "list": a word for reading.
Description, as the server wrote it List products/services (the price list used for job charges), 30 per page. Active items only by default. Kickserv: GET /{account}/items.xml.
Annotations the server declares
- title: List items
- readOnlyHint: true
kickserv_list_job_notesList the notes on one job.No findings
Why it is in this group
- The name "kickserv_list_job_notes" says "list": a word for reading.
Description, as the server wrote it List the notes on one job. Kickserv: GET /{account}/jobs/{job_number}/notes.xml.
Annotations the server declares
- title: List a job's notes
- readOnlyHint: true
kickserv_list_job_time_entriesList the time entries (hours logged by technicians) on one job.No findings
Why it is in this group
- The name "kickserv_list_job_time_entries" says "list": a word for reading.
Description, as the server wrote it List the time entries (hours logged by technicians) on one job. Kickserv: GET /{account}/jobs/{job_number}/time_entries.xml.
Annotations the server declares
- title: List a job's time entries
- readOnlyHint: true
kickserv_list_jobsList jobs (work orders, estimates, invoices), 30 per page, filterable by schedule window, status, assigned employee, category (job type) or job status.No findings
Why it is in this group
- The name "kickserv_list_jobs" says "list": a word for reading.
Description, as the server wrote it List jobs (work orders, estimates, invoices), 30 per page, filterable by schedule window, status, assigned employee, category (job type) or job status. Kickserv: GET /{account}/jobs.xml.
Annotations the server declares
- title: List jobs
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.16.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http kickserv https://kickserv.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__kickserv__kickserv_list_customers",
"mcp__kickserv__kickserv_get_customer",
"mcp__kickserv__kickserv_list_customer_jobs",
"mcp__kickserv__kickserv_list_jobs",
"mcp__kickserv__kickserv_get_job",
"mcp__kickserv__kickserv_list_customer_notes",
"mcp__kickserv__kickserv_list_job_notes",
"mcp__kickserv__kickserv_list_job_time_entries",
"mcp__kickserv__kickserv_get_task",
"mcp__kickserv__kickserv_list_employees",
"mcp__kickserv__kickserv_list_items"
],
"ask": [],
"deny": [
"mcp__kickserv__kickserv_create_customer",
"mcp__kickserv__kickserv_update_customer",
"mcp__kickserv__kickserv_add_customer_note",
"mcp__kickserv__kickserv_create_job",
"mcp__kickserv__kickserv_update_job",
"mcp__kickserv__kickserv_add_job_note",
"mcp__kickserv__kickserv_create_task",
"mcp__kickserv__kickserv_log_time_entry",
"mcp__kickserv__kickserv_add_job_charge"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as kickserv. Review it before you use it.