bots.st/field-service-business-platform-by-doing-work
Field Service Business Platform by Doing Work
Manage field jobs, scheduling, quotes, invoices, payments
2225 ms
answered our call
- State
- Answered
- Protocol
- MCP 2025-06-18
- Tools listed
- 200
- Answered
- 3 of the last 3 calls
How to reach it
- MCP, HTTP
https://doingwork.work/mcp
What it can do
| Tool | What it says it does |
|---|---|
audit_list | Read a shop's audit log, newest first (owner only). |
auth_oauthAuthorize | A signed-in person approves an agent client. Returns the redirect with a one-time code (PKCE S256). Needs a browser session, not an agent token. `resource` (RFC 8707) binds the token to this server's MCP endpoint. |
auth_oauthRegister | Register an OAuth client (RFC 7591 dynamic registration). Public clients only: PKCE, no secret. Redirects must be https, or http on loopback. |
auth_oauthToken | Exchange an authorization code and PKCE verifier, or a refresh token, for a short-lived agent access token and a new refresh token. Refresh tokens rotate: each works once, and reusing one revokes the whole chain. With grant_type urn:workos:agent-auth:grant-type:claim and your claim_token… |
auth_requestLink | Email a one-time sign-in link. Always answers ok, so it never reveals whether an email has an account. |
auth_sendLink | Email a person a one-time sign-in link that opens a named Doing Work screen after they sign in, so an agent can hand its person straight to the page that needs a human (brand, terms, job photos and so on). The screen comes from a fixed list: today, prices, brand, payments, resume, terms, transfer… |
availability_addTimeOff | Add time off for a worker (vacation, sick, appointment). |
availability_get | A worker's weekly hours, time off, and booked visits in a window (at most 62 days). Defaults to me. |
availability_removeTimeOff | Remove a time-off entry. |
availability_setHours | Set a worker's weekly hours, replacing what was there. Days are 0 (Sunday) to 6, times are shop local HH:MM. An empty list means no set hours (always available). |
calendar_createFeed | Make a calendar feed link (.ics) of one worker's visits that a calendar app subscribes to (read only). Leave person_id out for your own; owner or office can make one for any current member. A new feed turns that person's old one off. The link is shown once. |
calendar_listFeeds | Calendar feeds in a shop, newest first, with whether each is active and how often it was fetched. Field workers see only their own. The link is not shown again. |
calendar_revokeFeed | Turn a calendar feed off now. Calendar apps that fetch it after this get 410 and stop showing new visits. |
cards_get | The card a customer has on file (brand, last 4, expiry) and whether auto-pay is on (owner or office). |
cards_remove | Remove a customer's saved card (owner or office). Auto-pay turns off with it. |
cards_setupLink | Get a secure page where the customer saves a card with the shop's payment processor (owner or office). Send the link to the customer; Doing Work never sees the card number. Saving a new card replaces the old one. |
customers_archive | Archive a customer (hidden from lists, history kept) or bring one back. |
customers_contactAdd | Add a contact person to a customer (tenant, manager, billing, spouse). |
customers_contactUpdate | Change or remove one contact of a customer. |
customers_create | Add a customer to a shop, with kind, company, email, phone, billing address, lead source, tags and notes in one call. |
customers_duplicates | Likely duplicate customers in a shop: same email, same phone digits, or same name. |
customers_get | One customer with contacts, properties, custom fields and open balance. |
customers_list | Customers of a shop, newest first, filtered by tag, lead source or archived. |
customers_merge | Merge a duplicate customer into another: jobs, requests, contacts, properties and fields move over. |
customers_privacyExport | Everything the shop holds about one customer, as one JSON document, for a privacy request. |
customers_search | Find customers by name, company, email, phone or property address. |
customers_setAutopay | Turn auto-pay on or off for a customer (owner or office). On needs a saved card. With auto-pay on, each invoice sent to them is charged to the card on its due date (or the day it is sent if it has none). A failed charge is not retried; you get an email and the pay link still works. |
customers_statement | A customer's account statement: every invoice with total, paid and balance, and the total owed. |
customers_timeline | Everything that happened with a customer, newest first: requests, jobs, quotes, signatures, invoices and payments. |
customers_update | Change a customer's name, kind, company, email, phone, billing address, lead source, tags or notes. |
dispatch_suggest | Read only: for an urgent or emergency visit, the shop's field workers and owners ranked by who is free (no overlapping visit, not on time off, inside their hours) and then by the fewest visits that day. Suggestions only; assign with visits.assign. |
documents_dailyLog | Render the daily log for a job as a PDF: each day's entries in the workers' own words with who wrote them, and the photos they attached. Optional from and to dates (inclusive). Core stores the PDF with its sha256 and returns it (base64). |
documents_get | One stored job PDF (base64) with its sha256, byte for byte as it was made. |
documents_list | PDF documents core made for a job (photo reports, daily logs and submitted forms), newest first, with each file's sha256. |
documents_photoReport | Render a photo report PDF for a job: a title and the worker's own notes, then the job's photos in time order with stage and tags. Name photos with media_ids or leave it out for every photo on the job. Core stores the PDF with its sha256 and returns it (base64). |
equipment_add | Record equipment at a property: kind, make, model, serial, install date and warranty. |
equipment_list | Equipment at a property, or warranties ending soon across a shop. |
equipment_update | Change or archive an equipment record. |
events_catalog | Every event a webhook can receive, with its payload keys and types. Approved agent actions add requested_by_token_id to any event. |
expenses_add | Record money a worker spent on a job, with the receipt photo. Parts received on a purchase order are already job cost; when the vendor matches a received purchase order on the job, possible_po_duplicates lists it so you can ask before keeping both. The worker types the amount and tax from the… |
expenses_list | Expenses on a job, or across the shop between dates, with totals by category. Owner and office see every expense; a field worker sees the ones they entered. |
expenses_remove | Take an expense off the books (kept in history). The worker who entered it, the owner or office can. |
expenses_update | Change an expense: date, vendor, category, amount, tax, receipt photo or note. Amounts are still typed by a worker. The worker who entered it, the owner or office can change it. |
fees_preview | What Doing Work would take on a payment of this size right now, the effective rate on it, the month's volume so far (all locations under the same owner), and how far the shop is from the next, cheaper band (owner or office). Leave out amount_minor for just the month picture and the next band line. |
fees_schedule | Doing Work's fee schedule: one stepped rate on each shop's calendar month of card and bank payments, taken out of the payments. No plans, no monthly fee, no card on file. Every shop gets every feature and unlimited workers. |
fees_statement | A month's Doing Work fees for a shop: card and bank volume, fees by kind, the effective rate, each line, and how far the shop is from the next band this month (owner or office). |
fields_define | Add a custom field to customers, properties, jobs, quotes or invoices for a shop. |
fields_get | Custom field values on one record, with any required fields still empty. Money-type values and currency are null unless you may see prices (see_prices); key and type stay visible. |
fields_list | Custom fields a shop has defined, optionally for one kind of record. |
fields_set | Set one custom field value on a customer, property, job, quote or invoice. Writing a money value does not need see_prices (read masking only; D-20261106-CF-4). |
imports_fields | The customer import fields and the built-in presets (jobber, housecall_pro, servicetitan, companycam) with the export column each reads. |
imports_historyFields | Fields for importing history from another system (jobs with visit history, open quotes, unpaid invoices, price book, equipment, maintenance plans as service-due reminders, payment history as read-only records) and the jobber and housecall_pro presets per kind. |
imports_historyPreview | Dry run of a history import (kind jobs, quotes, invoices, pricebook, equipment, maintenance_plans, payments or flat_rate). Writes nothing. Returns a suggested mapping, what each record would do (create, update, skip, skip_blank, skip_closed or error) with how its customer matched, and a… |
imports_historyRun | Owner only: write a history import the owner confirmed in imports.historyPreview (send its preview_hash, plus the same csv, kind, source, on_match and mapping). Records already imported are matched by old id and skipped or updated, never duplicated. Imported quotes and invoices are drafts and are… |
imports_preview | Dry run of a customer CSV import. Writes nothing. Returns the headers, a suggested mapping (from a preset or the header names), and for every row the customer it would create or the problems found. Show the mapping to the owner before imports.run. next_actions says what to do next. |
imports_run | Owner only: import customers (and one service address each) from a CSV with the mapping the owner confirmed. mode all_or_nothing (default) writes nothing if any row fails; per_row writes the good rows and reports the rest. dry_run true checks without writing. |
invoices_aging | Accounts receivable aging: every open invoice's balance by how late it is (current, 1-30, 31-60, 61-90, over 90 days past due), with totals per customer (owner or office). An invoice with no due date is due when sent. |
invoices_create | Create an invoice without a quote, from lines the worker wrote (never filled in by AI). Optional due date, memo and deposit. Send it with invoices.send. |
invoices_createBatch | Create many invoices at once (up to 100), each from a job and the lines the worker wrote. All or nothing. With send=true each is sent and its pay link returned. |
invoices_createFromQuote | Create an invoice for a signed quote, for the total of the option and optional lines the customer picked. |
And 140 more tools.
In its maker's words
Headless field service software. Your AI agent runs jobs, schedules, quotes, invoices and payments.
- Website
- doingwork.work/connectors
- Publisher
- doingwork.work (2 listings in the registry)
- Listed from
- the official MCP Registry as
work.doingwork/shop - Version
- 1.0.1, updated 1 Nov 2026
- Kinds of work
- Messaging and support, Finance and markets, Productivity
The domain it lives on
- doingwork.work
- registered 24 Sep 2026 (1 month ago), at Cloudflare, Inc., its home page is a working site
From our own crawl of domain names: registry records and the home page as our crawler last saw it.
Every call we made
| When | What happened | Time |
|---|---|---|
| Answered | 2225 ms | |
| Answered | 1836 ms | |
| Answered | 1356 ms |
Next door
- Inbin: email for AI agentsDisposable inboxes for agent email verification
- AgentLairEmail delegation via inbox and vault
- Mailrith Email MarketingManage email subscribers, broadcasts, and automations with r
- faxforagents-mcpSend and receive faxes with approval
- AnyHookManage webhook inboxes for agent events
Is this your bot? Claim its address to add a verified badge and keep the listing current.