Tradify MCP server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TRADIFY_PROXY | No | Proxy for every request to Tradify, e.g. http://user:pass@host:port. | |
| TRADIFY_MCP_HOME | No | Folder containing session.json. Default: ~/.config/tradify-api-mcp. | |
| TRADIFY_MCP_HOST | No | Address of serve. | 127.0.0.1 |
| TRADIFY_MCP_PORT | No | Port of serve. | 8787 |
| TRADIFY_MCP_TOKEN | No | Bearer token required by serve; needed to listen beyond 127.0.0.1. | |
| TRADIFY_AUTH_TOKEN | No | The SessionId cookie value, used instead of session.json. | |
| TRADIFY_MCP_READ_ONLY | No | Set to 1 to hide and refuse every tool that changes Tradify; same as --read-only. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| add_job_noteA | Add a text note to a job's Notes tab. Adds a plain-text note to the job, signed with the signed-in user's name and today's date, as the Notes tab's New Note does. No staff member is notified and it reaches no one. get_job lists the notes. |
| create_customerA | New customer profile, optionally with contact details and a physical address. Creates an active customer with the company's default price group, document theme and tax settings, as the New Customer form does. email may hold several addresses separated by commas; quotes and invoices go there. It reaches no one and stays inside Tradify. |
| create_invoice_from_quoteA | Draft invoice from an approved or accepted quote, for all of it or part of it. Creates a draft invoice from a quote, as Create Invoice > From Quote does, linked to the quote and its job. mode entire copies every line; line_items copies the lines at the positions in lines; percentage invoices amount percent of the quote total; fixed_amount invoices amount (with tax); remaining invoices what the quote's earlier invoices did not. A part is one line at the quote's tax rate. Due date follows the customer's or your payment terms. The invoice stays a draft until send_invoice. Needs a plan with progress invoicing (Pro) for the part modes. |
| create_jobA | New job for a customer. It starts as Unassigned. Creates a job for a customer, as New Job does, and Tradify gives it the next job number. It starts Unassigned; schedule_appointment books staff on it. Contact, phone and site address default to the customer's. It reaches no one and stays inside Tradify. |
| create_quoteA | Draft quote with line items. Nothing is sent until you call send_quote. Creates a draft quote for a customer, as New Quote does. Each line is misc (description, quantity, unit_price) or time (hours at a billing rate; the price comes from the customer's price group unless unit_price is given). Tax uses the default rate, or tax_rate by name; amounts, tax and totals are worked out as Tradify does. job_id links it to a job of the same customer. Expiry defaults to your expiry days setting. Price list items and kits are not supported yet. The quote stays a draft until send_quote. |
| get_customerA | Customer profile with sites, notes, latest jobs, quotes and invoices, and the balance due. Returns one customer: contact, email, phone, address, sites and notes, plus the latest 25 jobs, quotes and invoices with their totals (job_count, quote_count and invoice_count give the full numbers; list_jobs, list_quotes and list_invoices page through more). balance_due adds up what is due on the approved invoices returned. |
| get_invoiceA | Full invoice: lines, tax, totals, every payment with date and method, amount due, jobs and quote. Returns one invoice: status (draft, approved, overdue, paid, cancelled), customer, its jobs, the quote it came from and how (entire_quote, quote_line_items, percentage, fixed, remaining), reference, description, invoice and due dates, whether it was sent, its lines, subtotal, tax, total, paid, credited and due, and each payment with date, amount, method and reference. |
| get_jobA | Full job: description, site, tasks, notes, appointments, costs, linked quotes and invoices. Returns one job: customer, contact, site address, status, reference and description, the staff on it, its tasks and notes, the Scheduler appointments (times with the company's UTC offset), the costs logged on it (products and misc costs), the time logged on it (timesheets) and the quotes and invoices linked to it. Read it before changing a job. |
| get_quoteA | Full quote: lines with price and cost, tax, totals, gross profit, dates and invoices made from it. Returns one quote: status (draft, awaiting_acceptance, accepted, declined, cancelled, expired), customer, job, reference, description, quote, expiry and acceptance dates, its lines (item, time, misc or kit, with quantity, unit price, unit cost, tax rate and amount), subtotal, tax, total, cost and gross profit, and the invoices made from it so far. |
| get_reportA | Job profitability, job sheet, staff productivity or timesheet report for a period, as rows. Runs one report of Tradify's Reports page for the days from to to (both included, at most a year) and returns the rows of its CSV download, amounts as numbers. job_profitability gives three rows per job (Time, Materials, Total) with estimated cost from quotes, actual cost, invoiced, to invoice, gross profit and margin. job_sheet lists the jobs with site, staff, schedule, contacts, entered by and on. staff_productivity gives billable, non-billable and total hours (h:mm) per staff member. timesheets lists each time entry with job, customer, staff member, billing rate, notes, date and hours. date_basis picks jobs by entry or by schedule date. Stops at 1000 rows with truncated true. |
| list_appointmentsA | Scheduler appointments in a date range, with staff, job, times and notes. Returns the Scheduler's job appointments that fall between from and to (both days included, at most 31 days), each with its job, customer, staff member, start and end (ISO 8601 with the company's UTC offset), notes and status (accepted, unconfirmed, declined, cancelled). staff keeps only those people, by full name. |
| list_customersA | Customer profiles with contact details and sites. Lists customers by name with contact, email (may be a comma list), phone, mobile, physical address and sites. search matches name, contact, email or phone, so use it to find the customer_id before creating a job or quote. archived lists archived customers instead. Pass next_cursor back as cursor. |
| list_invoicesA | Invoices with customer, job, due date, total, amount paid and amount due. Lists invoices, newest first, with customer, jobs, invoice and due dates, total, paid and due (total minus payments and credits). status approved (default) is every approved invoice not fully paid; overdue is the ones past their due date; paid, draft, cancelled and all as named. customer_id lists that customer's invoices, and status then filters the page you get. Pass next_cursor back as cursor. |
| list_jobsA | Jobs with number, customer, site address, status and assigned staff. Lists jobs, newest number first. By default only active jobs (every status marked active, built-in or custom); status all, a built-in status or the name of a custom status narrows it. customer_id lists that customer's jobs, and status then filters the page you get. Pass next_cursor back as cursor. |
| list_quotesA | Quotes with customer, total, quote date, expiry date and status. Lists quotes, newest quote date first, with customer, linked job, total (with tax), quote, expiry and accepted dates and status. By default the quotes awaiting acceptance; expired is the ones awaiting acceptance past their expiry date. since keeps quotes dated on or after that day, so use status accepted with since to find what was won in a period. Pass next_cursor back as cursor. |
| list_timesheetsA | Timesheet entries in a date range: staff, job, customer, billing rate, hours, notes, invoiced. Returns the time entries between from and to (both days included, at most 62 days), oldest first, each with staff member, job and customer (none for time off a job), billing rate and whether it is billable, start and end (ISO 8601 with the company's UTC offset), hours, notes and whether it is on an invoice. staff and job_id narrow it. total_hours sums the entries returned. |
| log_timeA | Add a timesheet entry for a staff member, optionally on a job, with billing rate and notes. Adds one entry to Timesheets from start to end (same day, at most 24 hours) for a staff member (default the signed-in user), on a job or on none, at a billing rate (default the staff member's own) with the staff member's cost rate, as the New Timesheet Entry dialog does. Time on a job shows in its costs, the job profitability report and can be invoiced. It reaches no one. |
| record_paymentA | Record a payment received against an invoice and reduce the amount due. Adds a payment you already received to an approved invoice, as Add Payment does: amount, date, method (by name, from Settings > Payment Methods) and a reference. It charges nobody and emails nobody. The amount cannot exceed what is due; paying it all marks the invoice paid. If an accounting app is connected, Tradify syncs the payment to it. |
| schedule_appointmentA | Book a job appointment on the Scheduler for staff, optionally emailing the customer a confirmation. Books the job on the Scheduler from start to end for each staff member named (by full name; default the signed-in user), as the Scheduler does. Each staff member gets Tradify's "You've been scheduled" notice, and an Unassigned or Assigned job becomes Scheduled. email_customer also sends the customer the appointment confirmation email, with customer_message in it. |
| send_invoiceA | Approve the invoice and email it to the customer, with payment reminders if enabled. Approves a draft invoice (Tradify gives it its number) and emails it from Tradify with the link to view and pay it; payment reminders follow if you enabled them. Without to it goes to the customer's email. Subject and text default to your invoice email template. An approved invoice can be sent again. Tradify sends this mail only when the login has 2-Step Security set up; otherwise the call stops before approving. |
| send_quoteA | Approve the quote and email it to the customer with a link to accept or decline online. Approves a draft quote (it becomes awaiting acceptance) and emails it from Tradify with the link where the customer accepts or declines it online. Without to it goes to the customer's email. Subject and text default to your quote email template. An approved quote can be sent again. Tradify sends this mail only when the login has 2-Step Security set up; otherwise the call stops before approving. |
| update_job_statusA | Set a status on a job, built-in or one of your custom statuses. Sets a job's status, as Change Status on the Jobs list does: to_invoice, on_hold, complete, cancelled, the others of the built-in list, or the name of a custom status from Settings > Jobs > Job Statuses (spaces as underscores). It reaches no one, and one more call sets it back. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| getting_started | Check the Tradify session and show what the tools can do, without changing anything. |
| plan_task | Turn a goal into Tradify tool calls: reads first, every write shown before it runs. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| guide | Where to start, read and write rules, paging. |
| tools | Every tool with its access (read or write) and full description. |
TDQS
Scored across 22 tools
Most tools target distinct resources and actions: list/get/create/send for customers, jobs, quotes, invoices, appointments and timesheets are clearly separated. Minor overlap exists between list_timesheets and the timesheets report mode, and between list_appointments and the appointment data embedded in get_job, but the descriptions make the intended use reasonably clear.
All tool names use snake_case with a predictable verb_noun pattern: list_*, get_*, create_*, send_*, log_*, record_*, schedule_* and update_*. The few variants such as add_job_note remain consistent with the same convention.
The server exposes 22 tools, which is slightly heavy but reasonable for a broad field-service platform covering customers, jobs, quotes, invoices, scheduling, timesheets and reports. Each tool appears to correspond to a real workflow rather than being redundant.
Core workflows are covered: create/list/get customers and jobs, quote creation and sending, invoice creation/sending, payment recording, scheduling, time logging and reporting. However, notable gaps remain: no update/delete for customers, quotes or invoices, no staff listing despite scheduling by full name, and limited job editing beyond status and notes.