Betterness
Bett-iDocsTutorialsAboutAugmented Wellness

Overview

Trust

Resources

System

Get Started

Clients

Recipes

Tools

Reference

DocsMCPRecipesOrder Labs

Order Labs (MCP)

Full purchase-to-results flow via MCP tools.

Step 1 — ensure profile is complete

Lab orders need: gender, phone (with dial code), birth date, and complete home address.

  1. getProfile() — check fields. Anything N/A blocks the order.
  2. If missing, call updateProfile(...) to fill them. Phone requires both phone and phoneDialCode.

The home address must be the user's personal home address. Never use a lab service center, appointment location, or anything from searchLabServiceCenters.

Step 2 — browse and select

listAvailableLabTests requires confirmedUsState and fails closed without it (returns locationRequired: true). Confirm the state with the user first — never guess. Same-named panels can be different sellable products across states, so always reference labs by objectKey, never by display name.

  1. listAvailableLabTests(confirmedUsState) — show name, price, included biomarkers, and objectKey
  2. Confirm the user wants to proceed before any payment

Step 3 — pay

  1. listSavedPaymentMethods() — check for saved cards

If saved cards exist:

  1. Show available cards (brand, last 4) and ask which to use
  2. purchaseLabTest(labTestObjectKey, paymentMethodExternalId) — order is created and auto-initialized

If no saved cards:

  1. purchaseLabTestWithCheckout(labTestObjectKey, successUrl, cancelUrl) — generate Stripe Checkout link
  2. Share the complete checkoutUrl with the user (never truncate). Order is created via webhook after payment.

Step 4 — initialize if needed

If auto-init didn't complete (e.g. profile field was missing at purchase time):

  1. getUserLabRecords() — check status
  2. If status is "Paid": initializeLabOrder(labOrderExternalId). Requires complete profile.

Step 5 — schedule blood draw

  1. Ask the user for ZIP code (or use home address)
  2. searchLabServiceCenters(zipCode, labOrderExternalId) — show nearby labs
  3. User picks a lab → ask for date / time preference
  4. getServiceCenterSlots(siteCode, labOrderExternalId, timezone, startDate, rangeDays) — show options. Let the user choose — don't pick automatically.
  5. User picks a slot → confirm date/time/location → bookLabAppointment(labOrderExternalId, bookingKey, timezone)

Step 6 — manage appointment

  • Reschedule (only while status is "Appointment Scheduled"): getServiceCenterSlots for new options → rescheduleLabAppointment(labOrderExternalId, newBookingKey, timezone). Old appointment auto-cancels.
  • Cancel: call cancelLabAppointment(labOrderExternalId) without a reason → show options → call again with reasonId to confirm
  • Re-book after cancel: use bookLabAppointment (not rescheduleLabAppointment — reschedule only works on active appointments)

Step 7 — view results

After the user visits the lab, results process automatically. Once status reaches "Completed":

  1. searchBiomarkers — view values and ranges
  2. getBiologicalAge() — see how it shifts the user's biological age

Status reference

StatusNext step
PaidComplete profile, then initializeLabOrder
Order SubmittedWait — no action needed
Requisition CreatedSearch for labs and book
Appointment ScheduledVisit at the scheduled time. Can reschedule/cancel.
Appointment CancelledbookLabAppointment for a new appointment
Redraw AvailableSchedule a new appointment for the redraw
Partial ResultsView available, wait for the rest
CompletedView with searchBiomarkers and getBiologicalAge
FailedContact support or reorder

Every order from getUserLabRecords includes statusDescription and nextStep fields. Use nextStep as your primary guide.

Health OverviewUpload Lab Results
© 2026 Betterness Inc.
Privacy PolicyTerms of ServiceHealth Data