We're live in beta — earn up to 12,000 credits by signing up today. Get started

Fergus MCP
for AI agents

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

Everything your AI can do in Fergus

86 tools your agent gets the moment Fergus is connected.

86 tools

  • list_jobs read

    List jobs

    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_job read

    Get a job

    Get one job by id, with its customer, site address, main contact, active quote, and whether it is on hold or archived.

  • create_job write

    Create a job

    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_job write

    Update a draft 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.

  • finalise_job write

    Finalise a draft job

    Turn a draft job into an active one and assign its job number. The draft must already have a customer, site and description.

  • hold_job write

    Put a job on hold

    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.

  • resume_job write

    Resume a job on hold

    Take a job off hold and return it to its previous state.

  • get_job_financial_summary read

    Get a job's financial summary

    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_job_phases read

    List a job's phases

    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_job_phase read

    Get a job phase

    Get one phase (site visit) by id, with its title, description, status and assigned groups.

  • create_job_phase write

    Create a job phase

    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.

  • update_job_phase write

    Update a job phase

    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_phase_financial_summary read

    Get a phase's financial summary

    Get costs, chargeable amount, billed total and labour hours for ONE phase rather than the whole job.

  • mark_phase_ready_for_invoice write

    Mark a phase ready to invoice

    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.

  • reopen_phase write

    Reopen an invoiced phase

    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_phase write

    Void a job phase

    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 read

    List quotes

    List quotes across every job, filtered by status. Use createdAfter or modifiedAfter to pull only what changed since a previous run.

  • get_quote read

    Get a quote

    Get one quote by id, from any job, with its sections, line items, totals and status.

  • get_quote_by_guid read

    Get a quote by GUID

    Get a quote by its GUID rather than its id, with full detail. GUIDs are what appear in customer-facing quote links.

  • list_job_quotes read

    List a job's quotes

    List every quote and quote version on one job, newest version first by default. Use this to see what was superseded.

  • get_job_quote read

    Get a quote on a job

    Get one quote by id within a specific job. Same record as fergus_get_quote, addressed through its job.

  • calculate_quote_totals read

    Calculate quote totals

    Price a selection of quote sections without changing anything: per-section totals plus subtotal, discount, GST and total. Fixed sections are always included.

  • create_quote write

    Create a quote

    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.

  • update_quote write

    Update a draft quote

    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.

  • update_quote_by_version write

    Update a draft quote by version

    Replace a draft quote's sections, addressed by version number instead of quote id. Same full-replace behaviour as fergus_update_quote.

  • publish_quote write

    Publish a quote

    Publish a draft quote so it can be sent to the customer. After this the quote can no longer be edited, only superseded.

  • mark_quote_sent write

    Mark a quote as sent

    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.

  • accept_quote write

    Accept a quote

    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.

  • decline_quote write

    Decline a quote

    Record that the customer declined a quote, optionally with the reason they gave.

  • void_quote write

    Void a quote

    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_stock_on_hand read

    List materials across all phases

    List material lines on job phases across every job, with quantity, price and cost. Search matches the item description only.

  • list_phase_stock_on_hand read

    List materials on a phase

    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_phase_stock write

    Add materials to a phase

    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.

  • update_phase_stock write

    Update a material line

    Change the description, quantity, price, cost or sales account on one material line. Only the fields you pass are changed.

  • delete_phase_stock write

    Remove a material line

    Remove one material line from a job phase. Use this to correct a line added in error; it does not affect anything already invoiced.

  • list_stock_used read

    List materials 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 read

    List customers

    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_customer read

    Get a customer

    Get one customer by id, with their main and billing contacts, physical and postal addresses, and pricing tier.

  • create_customer write

    Create a customer

    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_customer write

    Update a customer

    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 read

    List sites

    List sites, filtered by name, city, postcode or free text. A site is a physical address work happens at; jobs point at one.

  • get_site read

    Get a site

    Get one site by id, with its address, default and billing contacts, and the customer it belongs to.

  • create_site write

    Create a site

    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_site write

    Update a site

    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_site write

    Archive a site

    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.

  • restore_site write

    Restore an archived site

    Bring an archived site back into normal use.

  • list_contacts read

    List contacts

    List the people attached to customers and sites. Filter by which kind, or by a specific customer or site.

  • get_contact read

    Get a contact

    Get one contact by id, with all their contact details and what they are attached to.

  • create_contact write

    Create a contact

    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_contact write

    Update a contact

    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_enquiries read

    List enquiries

    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_enquiry read

    Get an enquiry

    Get one enquiry by id, with its contact details, description, source, status and the ids of any jobs created from it.

  • create_enquiry write

    Create an enquiry

    Record an inbound enquiry. Fergus requires the full set: name, email, phone, description, source, and at least the first address line and city.

  • list_customer_invoices read

    List customer invoices

    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_customer_invoice read

    Get a customer invoice

    Get one invoice by id, with the customer and the full breakdown of sections and line items.

  • search_pricebook_items read

    Search pricebook 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_pricebooks read

    List pricebooks

    List the supplier pricebooks loaded into Fergus. Use this to find a supplier's pricebook id.

  • get_pricebook read

    Get a pricebook

    Get one pricebook by id, with its supplier details.

  • list_pricebook_items read

    List items in a pricebook

    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_pricebook_item read

    Get a pricebook item

    Get one pricebook item by id, optionally priced against a specific pricing tier.

  • list_pricing_tiers read

    List pricing tiers

    List the pricing tiers set up in Fergus, with their markup rates and which is the default. Customers are assigned a tier.

  • get_pricing_tier read

    Get a pricing tier

    Get one pricing tier by id, with its name, type, markup rate and whether it is the default.

  • list_calendar_events read

    List calendar events

    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_calendar_event read

    Get a calendar event

    Get one calendar event by id, with its times, assigned users and any recurrence.

  • create_calendar_event write

    Create a calendar event

    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.

  • update_calendar_event write

    Update a calendar event

    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_calendar_event write

    Delete a calendar event

    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_tasks read

    List tasks

    List to-dos, filtered by status, assignee, job, due date or whether they are overdue.

  • get_task read

    Get a task

    Get one task by id, with its description, due date, assignees and whether it is done.

  • create_task write

    Create a task

    Create a to-do, optionally attached to a job and assigned to people. The job it is attached to cannot be changed afterwards.

  • update_task write

    Update a task

    Change a task's description, due date or assignees. assignedEmployeeIds REPLACES the whole list. The job a task belongs to cannot be changed.

  • complete_task write

    Complete a task

    Mark a task as done.

  • reopen_task write

    Reopen a task

    Move a completed task back to pending.

  • delete_task write

    Delete a task

    Remove a task. Fergus soft-deletes it, so this takes it out of lists rather than destroying history.

  • list_time_entries read

    List time entries

    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 read

    List notes

    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.

  • create_note write

    Create a note

    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.

  • update_note write

    Update a note

    Change a note's text, or pin and unpin it.

  • list_attachments read

    List files on a record

    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_attachment_download_url read

    Get a file's download link

    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_favourites read

    List quote favourites

    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_favourite_section read

    Get a quote favourite

    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_users read

    List users

    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_user read

    Get a user

    Get one user by id, with their name, contact details, type and status.

  • get_current_user read

    Get the connected user

    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_company read

    Get the company

    Get this Fergus account's own details: name, job number prefix, tax settings and configuration. Useful for formatting job and invoice numbers correctly.

Questions, answered

How do I connect Fergus to Claude?

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.

What can Claude do in Fergus?

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.

Does the AI see my Fergus password or API keys?

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.

Can I stop it changing anything in Fergus?

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.

Does this work with ChatGPT as well as Claude?

Yes. The endpoint is a standard hosted MCP server, so it works in any client that supports MCP connectors, including Claude and ChatGPT.