agentgates.aiVerified
Confidential computers for AI swarms: sealed VMs (Intel TDX) by the hour, USDC over x402.
Finance & CryptoPayments & trading
- Passed: Handshake
- Passed: Tools listed
- Passed: Updated recently
Median latency 514 ms · Last checked
Explore
Evidence for your next connection.
Independent measurements of remote MCP servers. Every observation has a timestamp.
Read-only probesMCP server · Payments & trading
Headless field service software. Your AI agent runs jobs, schedules, quotes, invoices and payments.
3 failed · 8 not measured
Median of successful probes over 7 days
Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.
Tool definitions returned by this server
Independent monitoring
Responded
The server completed its last measured handshake. This is an observation, not a guarantee.
Last checked| Test area | Passed | Failed | Unmeasured |
|---|---|---|---|
ConnectionCan a client connect and discover tools? | 5 | 0 | 0 |
Reliability & speedDoes it respond consistently and quickly? | 0 | 0 | 4 |
Access & authenticationWhat is required to use this server? | 1 | 0 | 2 |
Tool qualityAre the tool definitions usable by an agent? | 2 | 2 | 0 |
Publisher identityCan the publisher be traced to its source? | 3 | 1 | 2 |
Unmeasured means there is not enough evidence to decide. How these checks work
Start using Field Service Business Platform by Doing Work
Choose your client, copy the configuration, then enable the server in your client’s MCP settings.
Run this command in your terminal, then restart Claude Code.
Claude Code
claude mcp add --transport http field-service-business-platform-by-doing-work https://doingwork.work/mcpCapabilities
Showing 100 of 429 tools.
A read-only look across the shop: stale quotes, overdue or failed invoices, tomorrow's visits that are not ready, recap drafts, unanswered customer requests, the one setup step still missing, jobs under the margin floor, double-booked workers, and maintenance that is due. Ranked, best first. Snoozed items are left out. Each item has next_actions. Nothing is sent.
DiscoveredFollow-ups the agent scheduled for itself that are due now (tasks.create with for_agent). Each row has the words and the op to call. Read only. A field worker sees the ones they made; the owner and office see the shop's.
DiscoveredHide one checkup suggestion so it is not repeated. Pass the item key from agent.checkup. days snoozes for that many days (default 7). dismiss true hides it until you snooze again with a new time. Owner, office, or the worker who writes it.
Discoveredauth.md claim. Pass your claim_token and the email of the shop owner who should claim you. You get a 6 digit user_code and a verification_uri: tell the person to open the link, sign in with that email and type the code. Then poll the token endpoint with grant_type urn:workos:agent-auth:grant-type:claim. Calling again with the same claim_token starts a fresh code and cancels the old one.
DiscoveredPreferred when you know the owner's email: type service_auth and login_hint. The reply's short fields come first: claim_attempt_token, user_code, claim_token, claim_page, then verification_uri. Use verification_uri only when its length matches verification_uri_length. If it was cut, build the link from claim_page and claim_attempt_token. Do not invent the host. Do not open claim_url alone. Do not register again when complete is missing and claim_token is present; call the claim endpoint once only if claim_attempt_token is missing. Omitted scope means full `agent`. On an OAuth person grant (no shop_id) that can create a shop. A key from agents.register is bound to the shop the owner picks and cannot create another shop. read_only cannot. type anonymous only when you do not yet have the email. identity_assertion is not accepted.
DiscoveredOne approval request with its status and, once approved and run, the action's result. Owner and office see any; a field worker sees only their own.
DiscoveredApproval requests for a shop, newest first, optionally by status (pending, approved, denied, failed, expired). Requests past their expiry read as expired. Owner and office see every request; a field worker sees only the ones they or their agents asked for.
DiscoveredThe shop's approval rules: which agent actions wait for the owner.
DiscoveredRead a shop's audit log, newest first (owner only).
DiscoveredA 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.
DiscoveredRegister an OAuth client (RFC 7591 dynamic registration). Public clients only: PKCE, no secret. Redirects must be https, or http on loopback.
DiscoveredExchange 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.md), poll every interval only while the error is authorization_pending. slow_down means wait longer and poll again. access_denied, expired_token, and invalid_grant end this claim. Also stop when expires_in has passed. shown_once is only on success. Success hands over a named agent key once (no refresh token, it does not expire until revoked).
DiscoveredEmail a one-time sign-in link. Always answers ok, so it never reveals whether an email has an account.
DiscoveredEmail 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, close, work, capture, subcontractors, claim, card, hub, board, override, start. Shop screens take shop_id; capture and subcontractors take job_id; claim is refused here, because the agent connect flow sends its own link; board takes shop_id and an optional date; override takes kind (job or visit) and id; card and hub take the key from their link. To send a page to a named member of your shop with role and assignment checks, use members.sendPage. The link works once, in any browser, and expires in 15 minutes. Always answers ok, so it never reveals whether an email has an account. The page still checks that the person may see it.
DiscoveredAdd time off for a worker (vacation, sick, appointment).
DiscoveredA worker's weekly hours, time off, and booked visits in a window (at most 62 days). Defaults to me.
DiscoveredRemove a time-off entry.
DiscoveredSet 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).
DiscoveredOwner or office: one month (or from and to) of the shop's money as a ZIP for a bookkeeper or for QuickBooks Online by hand: a ledger CSV of every invoice, void, payment, refund, fee and payout, QuickBooks Online invoice import files, and QuickBooks Online bank upload files for a clearing account. Use this only when the shop has no agent QuickBooks sync; the sync (sync.changes) is the main way. The same period gives the same file and sha256 every time. You get download_url (60 minutes, 5 downloads; anyone with the link can download, so do not share it) or, with delivery inline, zip_base64 up to 5 MB.
DiscoveredOwner or office: the shop's past books exports, newest first: period, row counts and sha256 (to check a file you were sent). Run books.export again to get a new download link.
DiscoveredRun one safe action on up to 200 records: customers.addTags, customers.removeTags, customers.archive, customers.unarchive, jobs.addTags, jobs.removeTags, visits.assign. Each item goes through the shop's approval rules like a single call and is reported as done, approval_required or failed.
DiscoveredMake 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.
DiscoveredCalendar 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.
DiscoveredTurn a calendar feed off now. Calendar apps that fetch it after this get 410 and stop showing new visits.
DiscoveredThe card a customer has on file (brand, last 4, expiry) and whether auto-pay is on (owner or office).
DiscoveredRemove a customer's saved card (owner or office). Auto-pay turns off with it.
DiscoveredGet 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.
DiscoveredCancel a draft or sent change order (its open signature request is cancelled too, so the link stops working). An approved change order cannot be cancelled; write a new change order that takes the work back out.
DiscoveredWrite a change order on a job: a priced change to its scope (AI can draft lines; the owner approves them before the change order is sent). Discount lines take work out; a change order may total less than 0 (a credit). Tax: the shop default rate unless tax_rate_id is given (null for no tax). It starts as a draft; send it to the customer with changes.send.
DiscoveredOne change order with its lines, totals, status, signature and invoice.
DiscoveredBill approved change orders on a normal invoice (draft; send it with invoices.send). Each change order's lines are copied, labelled with its number. Leave out change_order_ids to bill every approved change order on the job not yet invoiced. They must share one tax rate. Credits (change orders under 0) come off as discounts and need priced work on the same invoice.
DiscoveredA job's change orders and its money picture: signed quotes (contract_minor) + approved change orders = revised_total_minor; pending (sent, not yet signed); invoiced on live invoices; unbilled; and approved change orders not on an invoice yet.
DiscoveredOwner or office: ask the customer to approve a change order. Doing Work writes the document (the lines, totals and the job's total before and after) and returns a single-use sign_url for the agent to deliver; the customer signs it on a hosted page and the change order becomes approved. To send again after the request was cancelled, call this again; for a fresh link on an open request use signatures.newLink.
DiscoveredAdd items to the end of a checklist (owner or office). Same locks as ticking.
DiscoveredArchive a checklist template so it is no longer offered. Checklists made from it are unchanged.
DiscoveredTick (done true) or untick an item, with an optional note. The worker on the visit (for a job checklist, on any visit of the job) or the office can do this. Locked once the visit or job is done, while a sign-off is waiting, and after sign-off.
DiscoveredPut a checklist on a job, or on one visit of the job (visit_id). Copy a template (checklist_template_id) or give items. A visit checklist gates that visit's done; a job checklist gates the job's done (jobs.complete), and the job also waits on checklists of visits not yet done.
DiscoveredOne checklist with every item (removed items included and marked), who ticked what and when, and its sign-off.
DiscoveredChecklists on a job (all of them, job-level and per visit) or on one visit, with counts of open required items and sign-off state. Workers see the checklists of the jobs they can see.
DiscoveredThe shop's checklist templates with their items. Archived ones only with include_archived.
DiscoveredRemove an item from a checklist (it stays in the history, marked removed). Owner or office; a required item only by the owner. Audited.
DiscoveredAsk for a sign-off on a finished checklist and get the signing link. Every required item must be ticked. The signer (the customer by default, or a shop member) signs the checklist exactly as it stands; items lock while the sign-off waits (signatures.cancel unlocks).
DiscoveredCreate a checklist template, or replace one (give checklist_template_id). Items are in order; required items (the default) must be ticked before the visit or job can be marked done. Checklists already made from it keep their own copy.
DiscoveredThe shop's recent corrections to drafts you made, newest first: what was changed or rejected and why. Read these before you draft a quote, a recap or a reply for this shop, and follow them. A field worker sees the full rows of their own; recap and quote drafts already carry the whole shop's lessons, with no names.
DiscoveredSave a correction when the worker edits, rejects, or says you got something wrong in a draft you made (a quote line, a recap, a task, a reply). Keep the before, the after and the worker's reason in their words. You read these before your next draft for the shop.
DiscoveredJob costing for one job: contract, invoiced, collected and revenue against labor (approved and pending time at each entry's cost rate), materials at cost, expenses and Doing Work fees, with profit and margin. Owner or office; needs seeing costs and prices.
DiscoveredJob costing across jobs dated between two days (inclusive, in the shop's time zone), with totals. Sort by profit (lowest first, to find the losers), margin, or date. Up to 500 jobs; truncated says when more matched.
DiscoveredThe shop's profit alert: the margin floor in percent, or null when off. Owner or office.
DiscoveredSet a profit alert (owner only): when an invoiced job's margin drops under below_percent, the job.margin_low event fires once for it (subscribe with a webhook). It fires again only after the margin climbs back and drops again. The check reads job costing as you see it. null turns it off.
DiscoveredArchive a crew (owner or office). Visits already booked keep their workers.
DiscoveredThe shop's crews and their current workers. Any worker in the shop can read it. Archived crews only with include_archived.
DiscoveredSave a named crew of workers to book together (owner or office). Give crew_id to rename it or replace its workers. lead_person_id marks the crew lead (a current member; they do not have to be in person_ids). Use the crew_id on visits.create, visits.assign or schedule.findTime. Shop roles are owner, office, lead and field.
DiscoveredArchive a customer (hidden from lists, history kept) or bring one back.
DiscoveredPick a customer audience by filters (tags, last job dates, kind of work, open quotes, money owed, maintenance plans, city or postal code, has email or phone) and get the counts and a page of matching customers. Read only: it sends nothing and changes nothing. Owner or office only; money filters need see_prices.
DiscoveredAdd a contact person to a customer (tenant, manager, billing, spouse).
DiscoveredChange or remove one contact of a customer.
DiscoveredAdd a customer to a shop, with kind, company, email, phone, billing address, lead source, tags and notes in one call.
DiscoveredLikely duplicate customers in a shop: same email, same phone digits, or same name.
DiscoveredOne customer with contacts, properties, custom fields and open balance. A field worker gets not found unless the customer has a job they are assigned to. open_balance_minor is null when see_prices is off.
DiscoveredCustomers of a shop, newest first, filtered by tag, lead source or archived. A field worker sees only customers on a job they are assigned to.
DiscoveredMerge a duplicate customer into another: jobs, requests, contacts, properties and fields move over.
DiscoveredEverything the shop holds about one customer, as one JSON document, for a privacy request.
DiscoveredFind customers by name, company, email, phone or property address.
DiscoveredTurn 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.
DiscoveredA customer's account statement: every invoice with total, paid, refunded and balance, and the total owed.
DiscoveredEverything that happened with a customer, newest first: requests, jobs, quotes, signatures, invoices and payments.
DiscoveredChange a customer's name, kind, company, email, phone, billing address, lead source, tags or notes.
DiscoveredWin-back list: customers with no visit in `months` (default 18; imported visits count), leaving out anyone with an open job or a visit coming up. Filter by job type words, a tag, or whether they have a maintenance plan. Each row has the last visit day, the last job, lifetime paid and whether they can be emailed or texted. Also counts who can't be contacted and shows the email they would get. Owner or office. Read only; customers.winBackQueue sends.
DiscoveredSend the win-back note to customers from customers.winBack: adds one service due date each (title, due in the shop's lead days), so the service_due_reminders job emails them once by the usual rules. Customers who can't be emailed, or who are no longer on the win-back list, are skipped and counted. Owner only. Needs service due emails on and the shop's mailing address. No texts.
DiscoveredRead 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.
DiscoveredRender 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).
DiscoveredOne stored job PDF (base64) with its sha256, byte for byte as it was made.
DiscoveredPDF documents core made for a job (photo reports, daily logs and submitted forms), newest first, with each file's sha256.
DiscoveredRender 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).
DiscoveredRecord equipment at a property: kind, make, model, serial, install date and warranty.
DiscoveredEquipment at a property, or warranties ending soon across a shop.
DiscoveredChange or archive an equipment record.
DiscoveredEvery event a webhook can receive, with its payload keys and types. Approved agent actions add requested_by_token_id to any event.
DiscoveredRecord 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 receipt; core never reads or fills in amounts. spent_on defaults to today in the shop's time zone.
DiscoveredExpenses 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.
DiscoveredTake an expense off the books (kept in history). The worker who entered it, the owner or office can.
DiscoveredChange 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.
DiscoveredWhat Doing Work would keep on a payment of this size right now, the effective rate on it, and the owner's payment total so far this month (owner or office). Leave out amount_minor for just the month picture. The checkout may ask Stripe to hold more, then return the difference when the payment succeeds.
DiscoveredDoing Work's fee: the first $1,000 of payments each calendar month is free, then 0.5%, never more than $149 per owner per month. No subscription. The fee comes out of the payment.
DiscoveredA month's Doing Work fees for a shop: payments, fees by kind, the effective rate, and each line (owner or office). volume_minor is the owner's month total the fee was based on, the same number fees.preview returns as month_volume_minor for this month. Refunds do not lower that total.
DiscoveredAdd a custom field to customers, properties, jobs, quotes or invoices for a shop.
DiscoveredCustom 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.
DiscoveredCustom fields a shop has defined, optionally for one kind of record.
DiscoveredSet 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).
DiscoveredArchive a financing link so it no longer shows on quotes (owner or office). Doing Work does not process financing or charge any fee for it. The link goes to the shop's own financing company.
DiscoveredThe shop's financing links. Any worker in the shop can read them. Archived links only with include_archived. Doing Work does not process financing or charge any fee for it. Each link goes to the shop's own financing company.
DiscoveredSave a financing link the shop works with, shown on quotes at or above its minimum (owner or office). Up to 3 live links. Doing Work does not process financing or charge any fee for it. The link goes to the shop's own financing company.
DiscoveredArchive a form template so it is no longer offered. Forms made from it are unchanged.
DiscoveredCancel a draft form (kept in history). A submitted form cannot be cancelled; start a corrected copy with forms.start copy_from_form_id.
DiscoveredSave answers on a draft form. answers is an object by field key; only the keys given change, and null clears one. Values: text for text/long_text, a number, true/false for yes_no, one option for choice, a list of options for multi_choice, YYYY-MM-DD for date, photo ids already on the job for photos.
DiscoveredOne form with its fields, answers, the required fields still missing, its stored PDF id and hash once submitted, and its sign-off.
DiscoveredForms on a job (job-level and per visit), or on one visit, newest first, without fields and answers. Filter by status.
DiscoveredThe shop's form templates with their fields. Archived ones only with include_archived.
DiscoveredAsk for a signature on a submitted form and get the signing link (owner or office). The signer (the customer by default, or a shop member) signs the stored PDF exactly as submitted.
DiscoveredCreate a form template (an inspection, a safety sheet, a start-up report), or replace one (give form_template_id). Fields are in order; types: heading, text, long_text, number, yes_no, choice, multi_choice, date, photos. Forms already started keep their own copy. Owner or office.
DiscoveredRecent measurements
| Checked | Result | Response | Tools |
|---|---|---|---|
| Connected | 1450 ms | 429 |