Headless field service software. Your AI agent runs jobs, schedules, quotes, invoices and payments.
Connect Remote server
claude mcp add --transport http shop https://doingwork.work/mcp
{
"mcpServers": {
"shop": {
"url": "https://doingwork.work/mcp"
}
}
}
{
"servers": {
"shop": {
"type": "http",
"url": "https://doingwork.work/mcp"
}
}
}
Settings > Connectors > Add custom connector
URL: https://doingwork.work/mcp
Tools 80 found in our last check
auth_requestLinkEmail a one-time sign-in link. Always answers ok, so it never reveals whether an email has an account.
auth_sendLinkEmail 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, resum…
auth_oauthRegisterRegister an OAuth client (RFC 7591 dynamic registration). Public clients only: PKCE, no secret. Redirects must be https, or http on loopback.
auth_oauthAuthorizeA 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_oauthTokenExchange 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 cl…
me_getThe signed-in person. Call me.start for shops, what this connection can do, and the next tasks.
me_startStart here. Shops this connection can use, the grant in plain words, counts, and the next tasks for the state of each shop.
me_shopsShops the signed-in person belongs to right now, with their role. A shop key gets only the one shop that key is bound to.
shops_createCreate a shop. The caller becomes its one owner. The caller must already have accepted the current Terms and Privacy, once for their account, which covers every shop. Until then this call is refused and names /p/legal. On the sign-up page, one checkbox records both current versi…
members_inviteInvite a person by email as office, lead or field. Owners and office can invite. A lead cannot. The invite link works once. Shop roles are owner, office, lead and field.
members_resendInviteEmail an open invite again with a new link, for a worker or office member who lost it or let it expire. The old invite is revoked and a new one is made with the same email and role: use the invite_id this returns from now on. The new link works once for 14 days. Owners and offic…
members_sendPageEmail a current member of your shop a one-time sign-in link that opens one page: board (the day board, for owner or office), override (mark a job or visit done anyway, owner only), or capture (job photos, for anyone on the job; a field worker must be assigned to a visit on it).…
members_acceptAccept an invite as the signed-in person. The invite email must match yours.
members_listCurrent members of a shop with role and start date. Role is owner, office, lead or field.
members_endEnd a membership: the owner removes a worker, or a worker leaves. Shop tokens end with it. The owner cannot leave; ownership moves only by transfer.
members_changeRoleOwner changes a worker among office, lead and field. The old membership ends and a new one starts, so history keeps both. Shop roles are owner, office, lead and field.
jobs_createStart a job at a home, found or created from the address: address is an object, not a string, with required line1, locality, postal_code and jurisdiction (line2 is optional; jurisdiction is an ISO 3166-2 code like US-ID, and a US shop also accepts ID, id, or Idaho), for example…
jobs_listJobs of a shop you belong to, newest first. A field worker sees only jobs with a visit they are assigned to. A lead also sees jobs their crew is on. Another shop is refused, including a shop token pointed at a different shop. Optional status filter. Shop roles are owner, office,…
jobs_getOne job with its home address and, when it was converted from a request, that request. A field worker gets not found unless they are assigned to a visit on it. A lead also gets a job their crew is on. Notes on the job are notes_list and notes_add (target_kind job, target_id this…
media_requestUploadGet a signed upload URL for a job photo or video. Before you call this, look at the file and say what it shows in summary: plain words, findings, any text you can read (model and serial plates), measurements, and for video a transcript, key moments and the length. If what you se…
media_listList the photos and videos you are allowed to see, with what the agent said each shows (summary), taken time, GPS location, heading and camera details. Filter by job, kind, words in the summary or transcript (q), summary status, distance from a point, taken time, or whether it h…
media_mapPhotos with a GPS location as a GeoJSON FeatureCollection (points in longitude, latitude order), ready for a map. Takes the same filters as media.list.
media_getOne photo or video's details, including its full summary (findings, readable text, measurements, transcript and key moments), taken time, location, camera fields and the full metadata read from the file. Set include_content to get the stored bytes as base64 (metadata included),…
jobs_requestConfirmationGet a single-use link the customer opens to confirm the work was done (or flag a problem).
media_setSummaryWrite or correct what a photo or video shows. Use it to fix a summary, to fill in one marked needs_summary (older photos and browser captures have none), or after a person edits the words. Each change keeps the earlier wording. Workers on the shop can edit; the summary is never…
media_needsSummaryPhotos and videos with no summary yet: older uploads, browser captures, and uploads whose agent could not look at the file. Open each with media.get include_content, look at it, then send media.setSummary.
quotes_createCreate a quote (AI can draft lines; a person who can send quotes approves agent-drafted lines before the quote is sent). Optional: good, better, best options and optional lines the customer picks when signing.
quotes_sendLock the quote and get a single-use signing link for the customer (the customer signs on the hosted page; an agent cannot sign or accept a quote). Who may send is shops.sendPermissions: the owner always may, office for any job, a lead for jobs on their crew, and a field worker f…
quotes_revisePass the COMPLETE new line list; any line you omit is removed. Replace an unsigned quote with a new version. Earlier signing links stop working; send it again for a new link.
quotes_withdrawWithdraw a draft or sent quote the customer has not signed, with an optional reason. Signing links stop working and follow-ups stop. A withdrawn quote cannot be reopened; create a new quote if needed.
quotes_getOne customer quote in this shop: doc_no and doc_label (Q-12), status, every version with its lines and totals, the job and customer, when it was sent and viewed, and the signer name and signed time once someone has signed. Read only. This is a quote, not an AI line draft (that i…
quotes_listCustomer quotes in one shop, newest first. Filter by job_id, status, or both. Read only. Send shop_id or job_id. A shop you are not a member of is refused, and a job you cannot access is not found.
subcontractors_getThe Idaho 45-525(3) subcontractor and supplier statement for a job: the latest signed one, any prepared draft, and whether final payment needs one.
subcontractors_preparePrepare the Idaho 45-525(3) statement for the shop to sign: a list of subcontractors, materialmen and rental equipment providers over $500, or none_attestation "yes" for "No subcontractors or suppliers over $500 on this job". Does not sign.
payments_connectLinkOwner only: the link to the shop's payment setup page. Give it to the owner; they open it, sign in, and press one button to set up card and bank payments with Stripe. Nothing starts until they do. status is none, onboarding, active, restricted or settling_only.
invoices_createFromQuoteCreate an invoice for a signed quote, for the total of the option and optional lines the customer picked.
invoices_sendSend an invoice (or the next part of it) and get a single-use pay link. Who may send is shops.sendPermissions: the owner always may, office for any job, a lead for jobs on their crew, and a field worker for jobs assigned to them, until the owner turns that off. Lines an agent dr…
invoices_markPaidOutsideRecord that the customer paid an invoice outside Doing Work (check, cash, financing, insurance or other). Owner or office, or their agent. Closes the invoice, and the job too unless its checklists still block done (job_status says which; finish them and call jobs.complete). The…
invoices_refundRefund part or all of a payment (owner or office, or their agent). The reply says requested. Confirmation arrives shortly, and invoices.get is where the confirmed refund shows. An agent refund above the shop's agent refund cap (shops.setAgentMoney, $250 unless the owner changed…
fees_scheduleDoing 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.
fees_previewWhat 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 wh…
fees_statementA 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 t…
records_keysPublic keys that verify signed job records.
jobs_recordThe latest signed record for a job and its level (logged, paid, verified). When the job has none yet, record is null and reason says so.
webhooks_createAdd a webhook endpoint for a shop (owner or office, or their agent). The url must be https on a public internet address. Returns the signing secret once; it is never shown again.
webhooks_listList a shop's webhook endpoints and their recent delivery counts. Secrets are not returned.
webhooks_deleteRemove a webhook endpoint. Pending deliveries to it stop.
audit_listRead a shop's audit log, newest first (owner only).
platforms_createCreate a developer platform account (private beta). The caller owns it.
platforms_listList the platform accounts this person owns and the shops each one manages: a person OAuth grant is not bound to one shop and gets that list, empty when they own none, and a shop-bound token (a named agent key or a dws_ shop token) is refused and should call me.shops.
platforms_revokeManageStop a platform from managing this shop. Shop owner only.
customers_createAdd a customer to a shop, with kind, company, email, phone, billing address, lead source, tags and notes in one call.
customers_getOne 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.
customers_listCustomers 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.
customers_searchFind customers by name, company, email, phone or property address.
customers_updateChange a customer's name, kind, company, email, phone, billing address, lead source, tags or notes.
customers_archiveArchive a customer (hidden from lists, history kept) or bring one back.
customers_duplicatesLikely duplicate customers in a shop: same email, same phone digits, or same name.
customers_mergeMerge a duplicate customer into another: jobs, requests, contacts, properties and fields move over.
customers_contactAddAdd a contact person to a customer (tenant, manager, billing, spouse).
customers_contactUpdateChange or remove one contact of a customer.
properties_addAdd a service address to a customer, with optional label and access notes.
properties_listService addresses saved on a customer (properties_add, or jobs_create when you pass customer_id); a job with no customer keeps its address on jobs_get and is not listed here.
properties_updateChange a property's label or access notes, or archive it.
equipment_addRecord equipment at a property: kind, make, model, serial, install date and warranty.
equipment_listEquipment at a property, or warranties ending soon across a shop.
equipment_updateChange or archive an equipment record.
jobs_setTagsSet the tags and lead source on a job.
customers_timelineEverything that happened with a customer, newest first: requests, jobs, quotes, signatures, invoices and payments.
customers_statementA customer's account statement: every invoice with total, paid, refunded and balance, and the total owed.
customers_privacyExportEverything the shop holds about one customer, as one JSON document, for a privacy request.
fields_defineAdd a custom field to customers, properties, jobs, quotes or invoices for a shop.
fields_listCustom fields a shop has defined, optionally for one kind of record.
fields_setSet 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).
fields_getCustom 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.
requests_createLog a request for work from a customer or a new lead.
requests_listRequests of a shop, newest first, filtered by stage, customer or tag. A field worker sees a request only when they are assigned to a visit on its job.
requests_pipelineHow many open requests a shop has in each stage, and how many were won, invoiced or lost in the last 30 days.
requests_getOne request with its customer and the job it became. A field worker gets not found unless they are assigned to a visit on that job.
requests_updateMove a request to another stage or change its details, customer or property.
Details
| Endpoint | https://doingwork.work/mcp (Streamable HTTP) |
| First published | 1 Nov 2026 |
| Last updated | 1 Nov 2026 |
| Registry name | work.doingwork/shop |
More finance and crypto servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
