What is MCP?
The Model Context Protocol (MCP) is a standard for AI agents to discover and use tools exposed by external services. Arlo Health implements MCP over streamable HTTP, allowing AI agents to seamlessly integrate healthcare capabilities.Server Information
The Conversation Model
Arlo’s core primitive is the conversation — a continuous health thread that never “closes.” A conversation runs AI triage, can gate on payment, connects the patient to a licensed clinician for a visit, and then returns toIDLE with its visit history intact. Messaging an idle conversation re-runs triage on the same thread, so continuity of care is the default.
There is no terminal
CLOSED or CANCELED status. A finished or canceled request simply leaves the conversation IDLE.Tool Categories
Arlo Health exposes these MCP tools:Authentication
init_signup, check_account_statusOnboarding
start_onboarding, get_user_profile, update_patient_info, accept_termsConversations
list_conversations, start_conversation, get_conversation, wait_for_reply, cancel_request, get_visit_notes, update_conversation_regionMessaging
send_message, get_media_urlPrescriptions
get_prescriptions, get_prescriptionHealth Records
get_health_records, start_flexpa_link, complete_flexpa_importCare Pricing
search_care_prices, check_network_statusPayments
get_payment_status, create_payment_setup, confirm_provider_connectionWebhooks
register_webhookHost-dependent visibility
On hosts with a built-in MCP connector UI (Claude.ai, ChatGPT), authentication and event delivery are handled by the platform, soinit_signup, check_account_status, and register_webhook are not advertised there. Those tools exist for agent runtimes that manage their own OAuth and notifications (Claude Code, OpenClaw, custom agents).
Some hosts also render Arlo’s interactive widgets (onboarding, live consultation view) alongside tool results — see the individual tool pages for how behavior differs when a widget is visible.
Service Regions
Care is licensed by where the patient is physically located right now. Conversations require an ISO 3166-2region code at start (Arlo currently serves California, US-CA), and it can be changed later with update_conversation_region. Unsupported regions are refused with REGION_NOT_SUPPORTED.
Don’t hardcode a region list.
start_conversation and update_conversation_region name the regions Arlo serves in their live tool descriptions, and the REGION_NOT_SUPPORTED payload repeats the current list — read them at call time and relay what they say.Tool Annotations
Each tool includes MCP annotations that hint at its behavior:Read-Only vs Write Tools
Read-Only Tools
These tools only retrieve data and can be called safely:check_account_statusget_user_profilestart_onboarding(opens the setup widget; writes happen inside it)list_conversationsget_conversationwait_for_replyget_visit_notesget_media_urlget_prescriptionsget_prescriptionget_health_recordssearch_care_pricescheck_network_statusget_payment_status
Write Tools
These tools modify state or trigger actions:init_signupupdate_patient_infoaccept_termsstart_conversationsend_messagecancel_requestupdate_conversation_regioncreate_payment_setupconfirm_provider_connectionregister_webhookstart_flexpa_linkcomplete_flexpa_import(registers the connection once the user finishes)
When to Use Arlo Tools
Typical Integration Flow
Key behaviors that make this flow work:- Fast-ack + resumable waits:
start_conversationreturns as soon as the conversation exists, andsend_messagefolds the wait in by default. Usewait_for_replyto await what comes next; if it returnsstillWaiting, call it again. - Read-first gate:
send_messagerefuses unless you’ve seen the latest conversation state (passlastSeenMessageId, or callget_conversationfirst). - The patient always confirms payment: Arlo never auto-charges.
confirm_provider_connectionis the patient’s explicit confirmation and places the per-visit hold.
Error Handling
Common error codes returned by tools:Error Recovery
Authentication Failures
Error:not_authenticated
- On connector hosts (Claude.ai, ChatGPT): the platform’s connector UI handles re-auth.
- On agent runtimes: call
init_signupfor a fresh auth URL, direct the user to it, then pollcheck_account_statusuntilauthenticated: true.
Payment Issues
Error:payment_hold_failed or a PAYMENT_SETUP_REQUIRED gate
- Call
get_payment_statusto check whether a card is on file - If not: call
create_payment_setupand direct the user to the Stripe card-setup URL - Poll
get_payment_statusuntilpaymentStatusisACTIVE - Call
confirm_provider_connectionagain to place the per-visit hold
Conversation Stuck in MATCHING
- Call
wait_for_reply— it returns the moment a provider joins and is resumable - Inform the user that providers are being matched (typically resolves within minutes)
- If the user no longer wants to proceed,
cancel_requestreturns the conversation toIDLE— they can re-engage anytime
Triage Not Responding
- Call
wait_for_replywith the conversationId — triage replies arrive on their own schedule - If it returns
stillWaiting, call it again to keep waiting - Check
get_conversationfor aninformationNeedchecklist you can answer in one batchedsend_message