ServiceM8
Field service
FloConnector is a hosted Fergus MCP server. Securely connect Claude, ChatGPT and other AI clients to Fergus. Ask in plain English; it runs the 86 tools for you, behind one endpoint, with you deciding what it can touch.
Beta. Connect it today and every tool below is live. It is new enough that we are still testing it against real Fergus accounts, so tell us if something looks off and we will fix it fast.
Built in-house. We wrote this connector ourselves and call Fergus directly, with no third party in the path. Nothing in a request or response is retained by anyone but Fergus.
Single connection. One Fergus organisation per workspace. Connect another in a separate workspace.
Tools
86 tools your agent gets the moment Fergus is connected.
86 tools
List jobs, filtered by status, type, customer, site or free text. This is the main way to find a job id. On-hold and archived jobs are excluded; filterShowOnHold and filterShowArchived each switch the list to show ONLY those, so covering every job takes three separate calls.
Get one job by id, with its customer, site address, main contact, active quote, and whether it is on hold or archived.
Create a job. A normal job needs jobType, title, description, customerId and siteId. Set isDraft to fill those in later, or set parentJobId to create a variation of an existing job.
Update a DRAFT job's fields before finalising it. Only works while the job is still a draft; a finalised job cannot be edited through this API.
Turn a draft job into an active one and assign its job number. The draft must already have a customer, site and description.
Put a job on hold until a given date, with a note saying why. Jobs on hold are hidden from fergus_list_jobs unless filterShowOnHold is set.
Take a job off hold and return it to its previous state.
Get costs incurred, chargeable amount, total billed, labour hours and quote totals for one job. Use this rather than adding up line items yourself.
List the phases (site visits) on one job, with their status. Phases are what carry labour and materials, so most work on a job starts by finding its phase id here.
Get one phase (site visit) by id, with its title, description, status and assigned groups.
Add a phase (site visit) to a job. Use this to split a job into visits or stages that can be scheduled and invoiced separately.
Change a phase's title and description. Both are required by Fergus, so send the existing value for whichever one you are not changing.
Get costs, chargeable amount, billed total and labour hours for ONE phase rather than the whole job.
Advance a phase to 'To Invoice', which is how work reaches the invoicing queue in Fergus. Safe to call twice; a phase already there is unchanged.
Reverse a phase out of 'To Invoice' or 'Invoiced' so it can be edited again. Needs the CAN_UNLOCK_SITE_VISIT permission on the Fergus user this connection uses; without it Fergus returns 403 and retrying will not help.
Void a phase so it no longer counts toward the job. Use this for a visit that was cancelled or raised in error.
List quotes across every job, filtered by status. Use createdAfter or modifiedAfter to pull only what changed since a previous run.
Get one quote by id, from any job, with its sections, line items, totals and status.
Get a quote by its GUID rather than its id, with full detail. GUIDs are what appear in customer-facing quote links.
List every quote and quote version on one job, newest version first by default. Use this to see what was superseded.
Get one quote by id within a specific job. Same record as fergus_get_quote, addressed through its job.
Price a selection of quote sections without changing anything: per-section totals plus subtotal, discount, GST and total. Fixed sections are always included.
Create a quote on a job. Only jobs of type Quote or Estimate can carry one. dueDays must be between 7 and 180, and at least one section is required.
Replace a DRAFT quote's sections. The section tree you send becomes the whole quote, so read it first and send it back with your change. Published quotes cannot be updated.
Replace a draft quote's sections, addressed by version number instead of quote id. Same full-replace behaviour as fergus_update_quote.
Publish a draft quote so it can be sent to the customer. After this the quote can no longer be edited, only superseded.
Record that a quote was sent to the customer. This does not send anything itself; it updates Fergus's record of what has gone out.
Record that the customer accepted a quote. If the quote has optional or multiple-choice sections you MUST pass selectedSectionIds saying which they took, or Fergus rejects the call.
Record that the customer declined a quote, optionally with the reason they gave.
Void a quote so it no longer counts as live. Use this for a quote raised in error, rather than declining one the customer actually saw.
List material lines on job phases across every job, with quantity, price and cost. Search matches the item description only.
List the material lines on ONE job phase. This is what a job's materials cost is built from, and where you get a line id to edit or remove.
Add a material line to a job phase. Either pass priceBookLineItemId and itemQuantity to take the item from a pricebook, or pass itemDescription, itemPrice, itemCost and itemQuantity to enter it by hand. Do not mix the two.
Change the description, quantity, price, cost or sales account on one material line. Only the fields you pass are changed.
Remove one material line from a job phase. Use this to correct a line added in error; it does not affect anything already invoiced.
Historical materials usage by product across all jobs, with total quantity. Only counts lines already invoiced to the customer. Goes back 90 days by default and 180 days at most.
List customers. Free-text search covers the customer name and the names and contact details of their main and billing contacts, so it is the fastest way to turn a name into a customer id.
Get one customer by id, with their main and billing contacts, physical and postal addresses, and pricing tier.
Create a customer with a main contact. If Fergus already has a matching customer it returns that one instead of creating a duplicate, and the result says so.
Update a customer. Fergus requires the full name and main contact on every update, so read the customer first and send the complete record back with your change.
List sites, filtered by name, city, postcode or free text. A site is a physical address work happens at; jobs point at one.
Get one site by id, with its address, default and billing contacts, and the customer it belongs to.
Create a site with an address and a default contact. If the site already exists Fergus returns that one instead of creating a duplicate, and the result says so.
Update a site's name and addresses. Fergus requires the site address on every update. Contacts cannot be changed here; use the contact tools.
Archive a site so it stops appearing in day-to-day lists. Reversible with fergus_restore_site; Fergus has no way to delete a site.
Bring an archived site back into normal use.
List the people attached to customers and sites. Filter by which kind, or by a specific customer or site.
Get one contact by id, with all their contact details and what they are attached to.
Add a person to a customer or a site. Set contactType to CUSTOMER and pass customerId, or SITE and pass siteId. At least one way of reaching them is required.
Update a contact. contactItems REPLACES the existing list, so read the contact first and send every item back, each with its id, or the ones you leave out are removed.
List inbound enquiries with their status and any jobs created from them. Filter by status, source, or free text over name, description, phone and email.
Get one enquiry by id, with its contact details, description, source, status and the ids of any jobs created from it.
Record an inbound enquiry. Fergus requires the full set: name, email, phone, description, source, and at least the first address line and city.
List invoices raised to customers, filtered by customer, job, invoice number or due date. Read-only: Fergus has no API for creating, sending or paying an invoice.
Get one invoice by id, with the customer and the full breakdown of sections and line items.
Search for items across supplier pricebooks by name, product code or supplier SKU. At least 3 characters. This is how you find a priceBookLineItemId for a quote or a materials line.
List the supplier pricebooks loaded into Fergus. Use this to find a supplier's pricebook id.
Get one pricebook by id, with its supplier details.
List every item in one pricebook. There are no filters here, so prefer fergus_search_pricebook_items when you know roughly what you are looking for.
Get one pricebook item by id, optionally priced against a specific pricing tier.
List the pricing tiers set up in Fergus, with their markup rates and which is the default. Customers are assigned a tier.
Get one pricing tier by id, with its name, type, markup rate and whether it is the default.
List scheduled events for a date range of up to one month. Filter by user, job, phase or type. Always pass filterDateFrom; this endpoint has no paging, so the range is what bounds the result.
Get one calendar event by id, with its times, assigned users and any recurrence.
Schedule an event. Times must fall on 15-minute boundaries. A JOB_PHASE event needs jobPhaseId; a QUOTE or ESTIMATE event needs jobId. Returns a list, because a recurring event creates several.
Change an event's time, title, description or who it is assigned to. Times must stay on 15-minute boundaries. To change who is on a grouped event you must also set updateAllGrouped.
Delete a calendar event. For a recurring event set deleteAllRecurring to remove the whole series, or deleteOnDate to remove one occurrence; for a grouped event set deleteAllGrouped.
List to-dos, filtered by status, assignee, job, due date or whether they are overdue.
Get one task by id, with its description, due date, assignees and whether it is done.
Create a to-do, optionally attached to a job and assigned to people. The job it is attached to cannot be changed afterwards.
Change a task's description, due date or assignees. assignedEmployeeIds REPLACES the whole list. The job a task belongs to cannot be changed.
Mark a task as done.
Move a completed task back to pending.
Remove a task. Fergus soft-deletes it, so this takes it out of lists rather than destroying history.
List labour logged against jobs, filtered by user, job, phase or date range. Read-only: Fergus has no API for creating, editing or deleting time entries, so hours cannot be logged this way.
List notes on jobs, customers, quotes, sites, tasks, enquiries, phases or invoices, with replies nested under their parent. Filter by what they are attached to or who wrote them.
Add a note to a job, customer, quote, site, task, enquiry, works order or invoice. Set parentId to reply to an existing note. Notes cannot be deleted once written, and cannot be added to a job phase.
Change a note's text, or pin and unpin it.
List the files attached to one customer, job, site, enquiry or phase, with names, types and sizes. Both entityType and entityId are required; there is no way to list files across records.
Get a temporary download link for one file. The link expires after a short time, so use it immediately and never store or share it. This returns a URL, not the file itself.
List the saved quote sections a business reuses, flat or as a folder tree. Their ids can be passed as favouriteSectionId when building a quote.
Get one saved quote section with all of its line items, so you can see what it would add to a quote before using it.
List the people in this Fergus account, filtered by role or status. Use this to turn a staff name into the employee id that tasks, calendar events and time entries need.
Get one user by id, with their name, contact details, type and status.
Show which Fergus user this connection acts as. Fergus grants exactly what that person can do, so check this first whenever something is refused with a permission error.
Get this Fergus account's own details: name, job number prefix, tax settings and configuration. Useful for formatting job and invoice numbers correctly.
No tools match your search.
Create a FloConnector workspace, connect Fergus once from the dashboard, then add your FloConnector endpoint to Claude as a custom connector. Claude handles the sign-in prompt; there is no server to host and no code to write. The same endpoint works in ChatGPT.
86 tools: 46 that read Fergus data and 40 that change it. Every tool is listed on this page, so you can see exactly what the model is able to call before you connect.
No. FloConnector holds the Fergus credential, encrypted before it is stored, and calls Fergus on the model's behalf. The AI client only ever sees the tools and their results, never the credential behind them.
Yes. Each connection is exposed through a profile, and a profile carries only the tools you switch on. Leave the 40 write tools off and the connection is read-only.
Yes. The endpoint is a standard hosted MCP server, so it works in any client that supports MCP connectors, including Claude and ChatGPT.