A ← Integrations
Internal · Jobber MCP
Jobber Jobber
Leadership brief

Nora

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.

Records

Watch the walkthroughs

Two recordings from the live Jobber integration. MCP is wired to Nora and these calls were tested against the real calendar.

Original org

Talk to Nora in the browser

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.

Web call widget

Idle. Chrome or Edge. Allow the microphone.

Expect: Hey, thanks for calling Adam Plumbing. This is Nora. What can I do for you?

Two ways to test

  1. This widget — original org, no phone needed.
  2. +1 (712) 517-3204 — test-org Nora with a real number. Same tools.

Do not use Eric’s Johns Pest line. After the call, check Jobber and MCP executions the same way as a phone test.

Open the full talk page →

Review

Status for this demo

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.
Who she is

Agent details

Name

Nora

Woman MiniMax voice. Do not swap Eric’s voice.

Shop

Adam Plumbing

Vancouver. 90-minute default visit. Weekdays 8 to 4.

Calendar

Jobber

She books the shop user. She must not say the plumber’s name out loud.

Timezone

America/Vancouver

Spoken times have no colon. Naive times are shop-local.

Goals

What this integration is for

Answer like a front desk

Short turns. One question at a time. No invented customers, times, or prices.

Use the real Jobber calendar

Openings are empty weekday gaps. A book creates a real visit. A move changes a real visit.

MCP is the only bridge

The model never talks to Jobber itself. It calls eleven n8n tools. Confirm only on the exact status.

Jobber objects

Request vs job vs visit

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

Request path

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.

Book path

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.

API

What a book actually writes

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.

What book_visit does

  1. jobCreate — client, property, title, notes, plus a stub invoice setting (fixed price, invoice on completion).
  2. visitCreate — the 90-minute block at the time they picked, assigned to the shop user.

Jobber’s 2025 API no longer nests the visit inside job create. That is why it is two writes, not one fat mutation.

What we do not write

  • Line items / products and services
  • A dollar amount, tax, or deposit
  • A quote converted into the job
  • An invoice total
  • Team SMS / “notify the plumber” pings

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.

Architecture

What we actually built

  1. Use the browser widget (original org) or dial +1 (712) 517-3204. Eric’s Johns Pest line stays untouched.
  2. Vapi answers as Nora (prompt + MiniMax woman voice + Deepgram Flux).
  3. Nora calls MCP tool jobber_mcp.
  4. n8n trigger path jobber-voice runs one Code Tool.
  5. That tool hits Jobber GraphQL with a Bearer token.
  6. JSON comes back with a status. Nora may confirm only on booked, rescheduled, noted, requested, quoted, or completed.
Toolbox

Eleven tools and when she may confirm

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.

Guardrails

What she will and will not do

She will

  • Look people up by first and last name
  • Offer two or three real openings
  • Book or move only after they pick a specific time
  • Save a note in their words
  • Open a work request if they will not book
  • Read a quote or balance only from the tool field
  • Hang up after bye

She will not

  • Invent an open time, a customer, or a price
  • Say they are booked unless status is booked
  • Say a plumber’s name
  • Say a colon in a time (“11:00” comes out as inches)
  • Take a card number or payment
  • Cancel or delete a visit
  • Handle anything that is not Adam Plumbing

Automatic fail

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.

Seed roster

Who is already in Jobber

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.
How to test

Call, then check Jobber

On the phone or browser widget

  1. Use the browser widget on this page (original org), or dial +1 (712) 517-3204. Dashboard Talk on the original org fails because that Nora has no number.
  2. She should say: Hey, thanks for calling Adam Plumbing. This is Nora. What can I do for you?
  3. Speak like a customer. Do not say tool names or Jobber.
  4. Give a first and last name. First name only should not look anyone up.
  5. If she asks for an address, give street, city, and postal code.
  6. For times only, say “don’t book anything.”
  7. After bye, she should hang up.

After you hang up

  1. Jobber → Calendar. Empty weekday gaps are openings. A new block is a book. A request is under Requests, not on the board.
  2. Timezone must be Vancouver. Shop hours Mon–Fri 8:00–4:00. Visits are 90 minutes.
  3. Jobber → Clients for notes. Open the job if you booked — title and instructions, no priced line items.
  4. Jobber · MCP · Voice → Executions. Each tool run shows the status she got back.
  5. Fail if she said 11:00 and the visit is 4:00 AM.
  6. Fail if she confirmed a book without status booked.
Scenarios

What we can test

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_customerget_open_timesbook_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_visitget_open_timesmove_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.
Examples

Scripts that exercise the MCP

Availability

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.

Book

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.

Move

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.

Quote

Priya Patel. Do I have a quote on file for the water heater?

Logs should show lookup_quote / found. She reads speak only.

Request

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.

Two matches

Hi, this is Chris.

She asks which Chris — Nguyen on Pender or Walker on Kingsway — before she looks anything else up.

On the system

What each layer should show

Jobber

Calendar, jobs, requests

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.

MCP executions

Workflow Jobber · MCP · Voice. Each run is one tool. Voice Talk or a short hello without a tool is just the handshake.

Confirm statuses

booked / rescheduled / noted / requested / quoted / completed. Any other status means she explains the problem and does the next step. She does not confirm.