Adam Plumbing virtual receptionist. A customer calls. She talks like a front desk. MCP writes and reads Jobber. She only confirms a book, move, note, request, quote, or complete when the tool status says it actually happened.
Two recordings from the live Jobber integration. MCP is wired to Nora and these calls were tested against the real calendar.
Dashboard Talk on your org does not work because this Nora has no phone number. The Vapi UI then asks for a number and fails. Use this widget — same assistant, same Jobber MCP. Or open the full talk page.
Idle. Chrome or Edge. Allow the microphone.
Expect: Hey, thanks for calling Adam Plumbing. This is Nora. What can I do for you?
Do not use Eric’s Johns Pest line. After the call, check Jobber and MCP executions the same way as a phone test.
| Item | Status |
|---|---|
| Live phone | +1 (712) 517-3204 on the test Vapi org. Eric stays +1 (603) 441-3315. |
| Agent | Nora. Woman MiniMax voice. Greeting names Adam Plumbing. Eric’s man voice was not changed. |
| Shop | Adam Plumbing · Vancouver · weekdays 8 to 4 · 90-minute visits |
| Writes to Jobber | Yes — book, move, note, request, quote, complete |
| Reads real calendar | Yes — openings are empty weekday gaps, not invented slots |
| Priced “full” job | No. A book is a real job + visit with no line items or dollar amount. The plumber prices on site. |
| Payment / cancel | Out of scope. She will not take a card. She cannot delete a visit. |
| Plumber names | Never spoken. Day and time only. |
Woman MiniMax voice. Do not swap Eric’s voice.
Vancouver. 90-minute default visit. Weekdays 8 to 4.
She books the shop user. She must not say the plumber’s name out loud.
Spoken times have no colon. Naive times are shop-local.
Short turns. One question at a time. No invented customers, times, or prices.
Openings are empty weekday gaps. A book creates a real visit. A move changes a real visit.
The model never talks to Jobber itself. It calls eleven n8n tools. Confirm only on the exact status.
These are three different records in Jobber. Nora uses the first two paths on the phone. A visit only exists after someone is actually booked.
| Request | Job | Visit | |
|---|---|---|---|
| Plain English | The office should follow up. | The work order. | The calendar block on that job. |
| Caller ready to pick a time? | No | Yes — they booked | Yes — that is the when |
| On the Jobber calendar? | No | Only once a visit is attached | Yes — 90 minutes |
| Nora tool | create_request | Created inside book_visit | Created inside book_visit |
| Confirm only if | requested | booked — she then says the day and time, not “job” | |
| Example | “Don’t book. Have someone call me about the water heater.” | Elena Rossi picks Tuesday morning → job + visit at that time | |
Name, phone, and the problem. Nothing hits the calendar. No plumber assigned. The office can later turn that request into a quote or a job.
She offers real openings, they pick one, then book_visit writes a job and a visit. She talks about the visit (day and time). She does not say “job” or a plumber name.
We already create a real Jobber job. We do not create a priced “full” job. That is a product choice, not an API dead end.
Jobber’s 2025 API no longer nests the visit inside job create. That is why it is two writes, not one fat mutation.
The GraphQL API can take line items if we have a real shop price. Nora is not allowed to invent one. The plumber confirms on site. A $0 or guessed total would look like a priced job in Jobber.
Call Nora
+1 (712) 517-3204
Nora (test org · this number)
8238dbc5…c29d
Nora (original org · Talk only)
cca827fe…c89a
Voice workflow
Jobber · MCP · Voice
MCP URL
…/mcp/jobber-voice
| Tool | Does | Success status | What lands in Jobber |
|---|---|---|---|
| find_customer | Look up a caller | found | Read only |
| get_open_times | Empty weekday gaps | ok | Read only. No new visit. |
| book_visit | After they pick a slot | booked | New job + 90-minute visit |
| move_visit | Change an existing visit | rescheduled | Same work, new time |
| add_customer_note | Gate, dog, lockbox | noted | Note on the client |
| lookup_visit | When is someone coming? | found | Read only |
| create_request | No time picked | requested | Work request. No calendar block. |
| lookup_invoice | What do I owe? | found | Read balanceSpeak only |
| lookup_quote | What did you quote me? | found | Read speak only |
| create_quote | They ask for a quote | quoted | Quote on file. No invented total. |
| complete_visit | Work already finished | completed | Visit marked complete |
The first six names match Eric on Housecall Pro. The last five are Jobber extras. She must not say a tool name out loud.
If she offered or confirmed 11 in the morning and Jobber shows 4:00 AM, the test failed. Times are shop-local Vancouver. If she confirmed a write without the exact success status, the test failed.
Use these people. Do not cancel their visits. Leave midday gaps so openings stay real.
| Caller | Use for | What’s on file |
|---|---|---|
| Maria Santos | Lookup, move, note | Kitchen leak. Upcoming Monday 31 Aug, 9:30 in the morning. Dog / side gate note. |
| James Okonkwo | Lookup | Basement drain. Tuesday 1 Sep, 2 in the afternoon. |
| Priya Patel | Quote lookup, request | Water heater quote and a work request. No visit. |
| Daniel Cho | Quote / invoice read | Bathroom tap quote. Call-before note. |
| Elena Rossi | New book | Lockbox note. No upcoming visit. 3308 Dunbar Street, Vancouver, V6S 2B9. |
| Chris Nguyen / Chris Walker | Disambiguation | Two Chrises. She should ask Nguyen on Pender or Walker on Kingsway. |
| Scenario | You say | Tools | Pass |
|---|---|---|---|
| Times only | Maria Santos. Don’t book. What do you have Tuesday morning? | get_open_times | 2–3 day+time slots. No plumber name. No new visit. |
| New visit | Elena Rossi. Leaky tap. Tuesday morning if you can. Use this number. | find_customer → get_open_times → book_visit | Status booked. Job + visit on the calendar at that time. No price on the job. |
| Lookup | Maria Santos. When is someone coming? | lookup_visit | She reads Monday at nine thirty. Calendar unchanged. |
| Move | Maria Santos. I need to move my visit. Tuesday morning. | lookup_visit → get_open_times → move_visit | Status rescheduled. Same work, new time. |
| Note | Maria Santos. Note the dog, use the side gate. | add_customer_note | Status noted. |
| Quote | Priya Patel. What did you quote me? | lookup_quote | She reads the speak field. No invented price. |
| Request | Don’t book a time. I just want a callback about a water heater. | create_request | Status requested. Appears under Requests. Calendar unchanged. |
| Invoice | Daniel Cho. What do I owe? | lookup_invoice | She reads balanceSpeak only, or says none are open. |
| Two Chrises | This is Chris. | find_customer | She asks Nguyen on Pender or Walker on Kingsway. |
| Cancel | Cancel my visit. | None that delete a visit | She takes a message. Visit still there. |
| First name only | “Adham” then wait | No find yet | She asks for last name before lookup. |
Hey, this is Maria Santos. Don’t book anything. What times do you have Tuesday morning?
Expect get_open_times only. Cross-check empty Tuesday morning slots in Jobber.
I’ve got a leaky kitchen tap. Elena Rossi. Use the number I’m calling from. Tuesday morning if you can.
Address if asked: 3308 Dunbar Street, Vancouver, V6S 2B9. Pick one time she offered. Then find the job and the 90-minute visit. There should be no priced line item.
Maria Santos. I need to move my visit. Tuesday morning instead.
She should look up Monday 9:30, offer free times, then move. Confirm the when field, no plumber name.
Priya Patel. Do I have a quote on file for the water heater?
Logs should show lookup_quote / found. She reads speak only.
Don’t book a time. This is Priya Patel. I just want the office to call me about a water heater.
Status requested. Check Jobber → Requests. Calendar should not get a new block.
Hi, this is Chris.
She asks which Chris — Nguyen on Pender or Walker on Kingsway — before she looks anything else up.
Week view for visits. A book is a 90-minute block on a new job with no price. Times-only leaves the board empty. A request lives under Requests. Nora must not say the assigned user out loud.
Workflow Jobber · MCP · Voice. Each run is one tool. Voice Talk or a short hello without a tool is just the handshake.
booked / rescheduled / noted / requested / quoted / completed. Any other status means she explains the problem and does the next step. She does not confirm.