NexHealth MCP by usefulapi
Read and write NexHealth appointments, patients, providers and locations.
Should I use this
Quality & Safety
Findings (3)
- LOWin nexhealth_list_appointment_slots
- LOWin nexhealth_list_appointment_types
- LOWin nexhealth_list_insurance_coverages
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"nexhealth": {
"url": "https://nexhealth.usefulapi.io/mcp"
}
}
}Remote endpoints
https://nexhealth.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (16)
🟢nexhealth_list_locations(subdomain)
List the practice locations for an institution (id, name, address). Good first call to discover location_ids for other tools. GET /locations.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_providers(subdomain, location_id, page, per_page)
List practitioners (providers) for an institution, optionally scoped to a location. GET /providers.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"description": "Restrict to a single location id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page": {
"description": "Page number (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Items per page (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_search_patients(subdomain, location_id, name, email, phone_number, ...)
Search patients within a location by name, email, phone, or date of birth. Patient search is always in a location context. GET /patients.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Location id to search within (REQUIRED)."
},
"name": {
"description": "Full or partial patient name.",
"type": "string"
},
"email": {
"description": "Patient email filter.",
"type": "string"
},
"phone_number": {
"description": "Patient phone number filter.",
"type": "string"
},
"date_of_birth": {
"description": "Patient date of birth, yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"sort": {
"description": "Sort field/direction, e.g. name or -created_at.",
"type": "string"
},
"inactive": {
"description": "Include inactive patients.",
"type": "boolean"
},
"page": {
"description": "Page number (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Items per page (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_get_patient(subdomain, id)
Fetch a single patient by id. GET /patients/{id}.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Patient id (path param)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_appointments(subdomain, location_id, start, end, patient_id, ...)
List appointments in a date/time window, optionally filtered by location, patient, or provider. GET /appointments.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"description": "Restrict to a single location id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"start": {
"description": "Window start, ISO8601 datetime.",
"type": "string"
},
"end": {
"description": "Window end, ISO8601 datetime.",
"type": "string"
},
"patient_id": {
"description": "Filter to one patient.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"provider_id": {
"description": "Filter to one provider.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"include": {
"description": "Related resources to embed, e.g. [\"patient\",\"provider\"] (sent as include[]).",
"type": "array",
"items": {
"type": "string"
}
},
"page": {
"description": "Page number (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Items per page (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_get_appointment(subdomain, id)
Fetch a single appointment by id. GET /appointments/{id}.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Appointment id (path param)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_appointment_slots(subdomain, start_date, days, lids, pids, ...)
Find bookable appointment start times across providers/locations for a date range. High-value for scheduling. GET /appointment_slots.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day to search, yyyy-mm-dd (REQUIRED)."
},
"days": {
"description": "Number of days from start_date to search.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"lids": {
"description": "Location ids (sent as lids[]=...).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"pids": {
"description": "Provider ids (sent as pids[]=...).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"slot_length": {
"description": "Desired slot length in minutes.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"overlapping_operatory_slots": {
"description": "Allow overlapping operatory slots.",
"type": "boolean"
}
},
"required": [
"start_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_appointment_types(subdomain, location_id, page, per_page)
List the appointment types configured for an institution/location. GET /appointment_types.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"description": "Restrict to a single location id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page": {
"description": "Page number (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Items per page (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_operatories(subdomain, location_id)
List operatories (chairs/rooms) for an institution, optionally scoped to a location. GET /operatories.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"description": "Restrict to a single location id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_insurance_plans(subdomain, location_id, page, per_page)
List insurance plans known to the institution, optionally scoped to a location. GET /insurance_plans.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"description": "Restrict to a single location id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page": {
"description": "Page number (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Items per page (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_insurance_coverages(subdomain, patient_id, page, per_page)
List a patient's insurance coverages. GET /insurance_coverages.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"patient_id": {
"description": "Patient id to fetch coverages for.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page": {
"description": "Page number (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Items per page (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_list_procedures(subdomain, patient_id, page, per_page)
List clinical procedures, optionally scoped to a patient. GET /procedures.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"patient_id": {
"description": "Filter to one patient's procedures.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page": {
"description": "Page number (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"per_page": {
"description": "Items per page (pagination).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢nexhealth_sync_status(subdomain)
Report the data-sync health for the practice's EHR/PMS integration (is the Synchronizer up to date?). GET /sync_status.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nexhealth_create_patient(subdomain, location_id, provider_id, first_name, last_name, ...)
CREATE a new patient record in a location. MUTATES DATA — writes to the connected EHR/PMS. GET the patient back to confirm. POST /patients.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Location id to create the patient in (REQUIRED)."
},
"provider_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Provider id to associate the patient with (REQUIRED)."
},
"first_name": {
"type": "string",
"description": "Patient first name."
},
"last_name": {
"type": "string",
"description": "Patient last name."
},
"email": {
"type": "string",
"description": "Patient email address."
},
"date_of_birth": {
"description": "Date of birth, yyyy-mm-dd.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"phone_number": {
"description": "Patient phone number.",
"type": "string"
},
"gender": {
"description": "Patient gender.",
"type": "string"
},
"npi": {
"description": "Provider NPI, sent as provider.npi in the body.",
"type": "string"
}
},
"required": [
"location_id",
"provider_id",
"first_name",
"last_name",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nexhealth_book_appointment(subdomain, location_id, patient_id, provider_id, start_time, ...)
BOOK a new appointment. MUTATES DATA — creates an appointment in the connected EHR/PMS (optionally notifying the patient). Provide either end_time or appointment_type_id. POST /appointments.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"location_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Location id for the appointment (REQUIRED)."
},
"patient_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Patient the appointment is for."
},
"provider_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Provider seeing the patient."
},
"start_time": {
"type": "string",
"description": "Appointment start, ISO8601 datetime."
},
"end_time": {
"description": "Appointment end, ISO8601 datetime (or set appointment_type_id).",
"type": "string"
},
"appointment_type_id": {
"description": "Appointment type id (determines duration if end_time omitted).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"operatory_id": {
"description": "Operatory (chair/room) id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"note": {
"description": "Free-text note on the appointment.",
"type": "string"
},
"notify_patient": {
"description": "Notify the patient (sent as notify_patient query param).",
"type": "boolean"
}
},
"required": [
"location_id",
"patient_id",
"provider_id",
"start_time"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴nexhealth_update_appointment(subdomain, id, start_time, provider_id, operatory_id, ...)
UPDATE / reschedule / cancel / confirm an existing appointment by id. MUTATES DATA in the connected EHR/PMS. PATCH /appointments/{id}.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.",
"type": "string"
},
"id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Appointment id to update (path param)."
},
"start_time": {
"description": "New start, ISO8601 datetime (reschedule).",
"type": "string"
},
"provider_id": {
"description": "Reassign to a provider.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"operatory_id": {
"description": "Reassign operatory (chair/room).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"cancelled": {
"description": "Set true to cancel the appointment.",
"type": "boolean"
},
"confirmed": {
"description": "Set true to confirm the appointment.",
"type": "boolean"
},
"note": {
"description": "Update the free-text note.",
"type": "string"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence