DoneOnce › Help › Your AI assistant in DoneOnce

Your AI assistant in DoneOnce

DoneOnce has an MCP server — the standard way an AI assistant (Claude, ChatGPT and others) plugs into an app. Once connected, you can ask your assistant things like "add the Garcias at 12 Oak St, biweekly on Tuesdays", "who is behind on payments?" or "send Ana the estimate for the pool cleaning", and it does the work inside your DoneOnce, as you.

It can do exactly what you can do in the app, and nothing more: a tech's assistant sees the day and the book, the office's sees the money. Anything that sends money or messages is described to you first and done only after your yes.

Connect Claude (claude.ai or the desktop app)

  1. In Claude, open Customize → Connectors, press + and choose Add custom connector.
  2. Name it DoneOnce and paste this URL: https://mcp.doneonce.app/mcp
  3. Press Add, then Connect. A DoneOnce window opens: sign in with your DoneOnce email and password and press Approve.

That is all — no token to copy. Claude's Free plan allows one custom connector; paid plans more.

Connect Claude Code

In a terminal:

claude mcp add --transport http --scope user doneonce https://mcp.doneonce.app/mcp

Then type /mcp inside Claude Code, choose doneonce and sign in the same way.

Other assistants

Any assistant that supports remote MCP connectors with sign-in (OAuth) works with the same URL. A program that can only send a fixed header can use a token instead: in DoneOnce, Settings → Agents → How to connect → With a token, mint one, and send it as Authorization: Bearer <token>.

Staying in control

For the assistant reading this

Bringing a whole client list (for the assistant)

The person hands you their spreadsheet — an export from Jobber, Housecall Pro, QuickBooks, Excel or Google Sheets. Two tools, always in this order:

  1. import_book with the file as text, exactly as given, header row first. Never re-type, clean or summarize rows: the server reads the file with the same rules the app's Import CSV uses, and nothing is written yet. Name the columns only if the guess in the answer is wrong (mapping: name, street, zip required; phone, email, category, day, frequency, notes optional; null leaves one out). If the whole address sits in one column ("12 Oak St, Stuart, FL 34994"), leave it: with no ZIP column the server reads each ZIP off the end of the address (zipFromAddress: true in the answer) and refuses, with its reason, a row that has none.
  2. Show the person the answer in plain words: how many become clients, how many get a weekly or every-other-week service and on which weekday (the zone that covers the ZIP decides it, then the file's day column), which rows are refused and why, which get no service and why, and the new categories. If a column was misread, fix mapping and preview again.
  3. commit_import with the importId, only after their yes. Call it again while remaining is above 0 — it continues where it stopped and never writes a row twice. Then report the totals: created, services, duplicates, failed (each failure comes with its reason).

What lands: each client with its address as the primary one (gate codes and notes on the address), its category, and its standing service, unplaced — then week_plan and place_service put each one on a crew, as above (or the office does it from the week's queue in the app). Monthly and one-time services are left for the person to add in the service dialog; the preview names those rows. Set the zones up before the import if the business has them, so the weekdays come out right.

Two months free, no card. Setup is done with you, in English or Spanish.

Start free