ServiceM8
Field service
FloConnector is a hosted Ascora MCP server. Securely connect Claude, ChatGPT and other AI clients to Ascora. Ask in plain English; it runs the 46 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 Ascora accounts, so tell us if something looks off and we will fix it fast.
Built in-house. We wrote this connector ourselves and call Ascora directly, with no third party in the path. Nothing in a request or response is retained by anyone but Ascora.
Single connection. One Ascora organisation per workspace. Connect another in a separate workspace.
Tools
46 tools your agent gets the moment Ascora is connected.
46 tools
Create an enquiry (a lead) in Ascora from contact details and a description of the work. Write-only: enquiries cannot be listed or read back through the API, so keep the returned entityId.
Search customers. FilterText covers the company name, customer number, email, phone, mobile, billing customer name and contact names; PhoneNumber searches both phone fields. Paged.
Get one customer by GUID, with both addresses, on-hold flags, customer type, lead source, billing customer and assigned user.
Create a customer. Ascora has no duplicate check, so search first. customerType and leadSource names that do not exist are CREATED, not rejected; prefer ids.
Update an existing customer by GUID. Send only the fields to change — everything else is preserved. The same create-on-miss rule applies to customerType and leadSource names.
Search contacts across every customer. FilterText is a contains-match over name, email, phone and mobile; PhoneNumber is an exact match with spaces ignored. Paged.
List every contact attached to one customer, by customer GUID, including each contact's role.
Get one contact by GUID, with the customer it belongs to and its role.
Add a contact to a customer. A contactRole name that does not exist is CREATED in Ascora, not rejected.
Update an existing contact by GUID. Send only the fields to change — everything else is preserved.
Search quotes by text, status, job type, assigned user, customer name or created-date range. Status DEFAULTS TO OPEN (in progress or sent); pass ALL for everything, including won and lost. Paged.
Get one quote by NUMBER (Q57, or a section like Q1234.01): totals, dates, status, pricing method, customers and address. Does NOT include the line items; no endpoint does.
Create a quote for a site customer, optionally with all its supplies, kits, labour and write-ins in the same call, or as a SECTIONS quote with childQuotes each carrying their own items. Returns the new quoteNumber. WARNING: a failure can still have created the quote, so check ascora_list_quotes before retrying.
Add price-list supplies to a quote or section by quote number, from supplyIds with quantities. Appends every time; the same id twice is two lines. Nothing reads the lines back, so check the totals with ascora_get_quote.
Add kits to a quote or section by quote number, from kitIds with quantities. Appends every time. Nothing reads the lines back.
Add labour to a quote or section by quote number, as labour role ids (from ascora_list_labour_roles) with hours. Appends every time. KNOWN VENDOR FAULT (2026-09-02): Ascora's API rejects every labour role with a database error; when it fails, add the labour as a write-in with ascora_add_quote_write_ins at the role's hourly rate instead.
Add one-off lines that are not in the price list to a quote or section, each with description, prices and quantity. Appends every time. There is no per-line delete, and the only way to remove one takes every other write-in with it.
Add named child sections to an existing quote. Returns only success: the new section numbers (Q80.01, Q80.02…) are not returned and must be inferred from displayOrder before adding items to them.
Remove all supplies, all kits and/or all labour from one TOP-LEVEL quote. WARNING: removeSupplies ALSO DELETES EVERY WRITE-IN on the quote, which cannot be undone or read back first. Does not work on a SECTIONS quote or its sections (Ascora reports success and removes nothing), so the connector refuses those; delete and re-add the section instead.
Set a quote to IN-PROGRESS, SENT-TO-CUSTOMER, LOST (with a reason) or WON. WON converts the quote into a job; Ascora reports the new job in the message text, so follow up with ascora_list_jobs to get its number.
Delete a whole quote, or one section by its full number (Q93.02). Only quotes still In Progress can be deleted; anything sent, won or lost is refused with INVALID-STATUS. Deleting a section renumbers the ones after it.
List every labour role with its hourly rate ex tax. The labourRoleId is what ascora_add_quote_labour takes. Small and stable; cached briefly.
List the account's standard section names available to add to a quote or job, with display order. Names only, no ids.
List the account's standard stage names available to add to a quote or job, with display order. Names only, no ids.
Search jobs by text, status filter, job type, assigned user, customer name or created-date range. Status DEFAULTS TO OPEN jobs; pass ALL for everything. Paged.
Get one job by NUMBER (J112): status, dates, totals, pricing method, work undertaken, customers, address and coordinates. Line items are not exposed anywhere.
Create a job directly for a site customer, without a quote. The job starts as New and CANNOT be updated, progressed or given line items through the API afterwards; for a job with items, create a quote and mark it WON instead.
List every labour line on a job by job number: role, hours, charge-out rate, totals, who did it, whether it is chargeable and whether invoiced. The chargeable view; see ascora_get_job_timesheets for the payroll view of the same hours.
List every timesheet entry clocked against a job by job number: person, start and end, hours, cost and pay rates, meal break, and whether sent to payroll. The payroll view of the same hours as ascora_get_job_labour; do not add the two together.
Search the price list for supplies (materials and services) with cost and sell prices, category, favourite flag and default supplier. The supplyId is what ascora_add_quote_supplies takes. Paged; filter rather than enumerate.
Search kits (a bundle of supplies and labour priced as one line) with sell prices and pricing method. The kitId is what ascora_add_quote_kits takes. A kit's contents are not exposed. Paged.
List the categories that segment supplies and kits. Ascora has two independent category axes (1 and 2), each with one level of sub-categories linked by parentCategoryId. Paged.
Search suppliers by partial name or number, or by EXACT business number (ABN) with spaces ignored, which is the one lookup that cannot match the wrong supplier. Paged.
Get one supplier by GUID, with contact details, both addresses, expense account and notes.
Create a supplier. Ascora has no duplicate check, so search by business number first.
Update an existing supplier by GUID. Send only the fields to change — everything else is preserved.
Search supplier invoices and credit notes by supplier name, tracking (invoice) number, invoice-date range, or only those not yet sent to accounting. Each result includes its line items. Paged.
Get one supplier invoice or credit note by GUID, with its supplier, dates, type, totals, sent-to-accounts flag and line items.
Record a supplier invoice or credit note (type CREDIT) with its lines, priced by line total ex tax. The supplier is matched by id or name. Returns the new supplierInvoiceId.
Mark supplier invoices, by GUID, as pushed to the accounting package. IRREVERSIBLE: they drop out of the unsent filter for good. Call it only for invoices the downstream system has confirmed, never on failure.
List customer invoices dated before a cutoff that have NOT yet been marked as sent to the accounting package, with lines, job, and billing details. This is the only way to read customer invoices; once marked sent they are gone from the API. Unpaginated.
Mark customer invoices, by GUID, as pushed to the accounting package. IRREVERSIBLE and it makes them unreadable through the API for good. Call it only for invoices the downstream system has confirmed, never on failure.
List customer payments dated before a cutoff that have not yet been marked as sent to the accounting package. Payments may only appear once their invoice has been marked sent, so export invoices first. Unpaginated.
Record a payment against a customer invoice by invoice NUMBER (e.g. I3083), with amount, date and a payment method name that already exists in Ascora. NOT idempotent: a retry records a second payment. Refused if it exceeds the balance.
Mark payments, by GUID, as pushed to the accounting package. IRREVERSIBLE: they drop out of ascora_list_payments_to_send for good. Call it only for payments the downstream system has confirmed.
Add a text note to an enquiry, job, quotation, invoice or customer. Notes cannot be read back or deleted through the API, so do not retry on failure without checking in Ascora first.
No tools match your search.
Create a FloConnector workspace, connect Ascora 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.
46 tools: 23 that read Ascora data and 23 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 Ascora credential, encrypted before it is stored, and calls Ascora 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 23 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.