Read and write NexHealth appointments, patients, providers and locations.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Patient the appointment is for.
Appointment start, ISO8601 datetime.
Location id for the appointment (REQUIRED).
Provider seeing the patient.
Free-text note on the appointment.
Appointment end, ISO8601 datetime (or set appointment_type_id).
Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset.
Operatory (chair/room) id.
Notify the patient (sent as notify_patient query param).
Appointment type id (determines duration if end_time omitted).
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
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.
| Argument | Type | Description |
|---|---|---|
| note | string | Free-text note on the appointment. |
| end_time | string | Appointment end, ISO8601 datetime (or set appointment_type_id). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| patient_id* | integer | Patient the appointment is for. |
| start_time* | string | Appointment start, ISO8601 datetime. |
| location_id* | integer | Location id for the appointment (REQUIRED). |
| provider_id* | integer | Provider seeing the patient. |
| operatory_id | integer | Operatory (chair/room) id. |
| notify_patient | boolean | Notify the patient (sent as notify_patient query param). |
| appointment_type_id | integer | Appointment type id (determines duration if end_time omitted). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"location_id",
"patient_id",
"provider_id",
"start_time"
],
"properties": {
"note": {
"type": "string",
"description": "Free-text note on the appointment."
},
"end_time": {
"type": "string",
"description": "Appointment end, ISO8601 datetime (or set appointment_type_id)."
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"patient_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Patient the appointment is for."
},
"start_time": {
"type": "string",
"description": "Appointment start, ISO8601 datetime."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Location id for the appointment (REQUIRED)."
},
"provider_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Provider seeing the patient."
},
"operatory_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Operatory (chair/room) id."
},
"notify_patient": {
"type": "boolean",
"description": "Notify the patient (sent as notify_patient query param)."
},
"appointment_type_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Appointment type id (determines duration if end_time omitted)."
}
}
}CREATE a new patient record in a location. MUTATES DATA — writes to the connected EHR/PMS. GET the patient back to confirm. POST /patients.
| Argument | Type | Description |
|---|---|---|
| npi | string | Provider NPI, sent as provider.npi in the body. |
| email* | string | Patient email address. |
| gender | string | Patient gender. |
| last_name* | string | Patient last name. |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| first_name* | string | Patient first name. |
| location_id* | integer | Location id to create the patient in (REQUIRED). |
| provider_id* | integer | Provider id to associate the patient with (REQUIRED). |
| phone_number |
Fetch a single appointment by id. GET /appointments/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Appointment id (path param). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Appointment id (path param)."
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
}
}
}Fetch a single patient by id. GET /patients/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Patient id (path param). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Patient id (path param)."
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
}
}
}Find bookable appointment start times across providers/locations for a date range. High-value for scheduling. GET /appointment_slots.
| Argument | Type | Description |
|---|---|---|
| days | integer | Number of days from start_date to search. |
| lids | array | Location ids (sent as lids[]=...). |
| pids | array | Provider ids (sent as pids[]=...). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| start_date* | string | First day to search, yyyy-mm-dd (REQUIRED). |
| slot_length | integer | Desired slot length in minutes. |
| overlapping_operatory_slots | boolean | Allow overlapping operatory slots. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"start_date"
],
"properties": {
"days": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Number of days from start_date to search.",
"exclusiveMinimum": 0
},
"lids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"description": "Location ids (sent as lids[]=...)."
},
"pids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"description": "Provider ids (sent as pids[]=...)."
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day to search, yyyy-mm-dd (REQUIRED)."
},
"slot_length": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Desired slot length in minutes.",
"exclusiveMinimum": 0
},
"overlapping_operatory_slots": {
"type": "boolean",
"description": "Allow overlapping operatory slots."
}
}
}List the appointment types configured for an institution/location. GET /appointment_types.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (pagination). |
| per_page | integer | Items per page (pagination). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| location_id | integer | Restrict to a single location id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (pagination).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 1000,
"description": "Items per page (pagination).",
"exclusiveMinimum": 0
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Restrict to a single location id."
}
}
}List appointments in a date/time window, optionally filtered by location, patient, or provider. GET /appointments.
| Argument | Type | Description |
|---|---|---|
| end | string | Window end, ISO8601 datetime. |
| page | integer | Page number (pagination). |
| start | string | Window start, ISO8601 datetime. |
| include | array | Related resources to embed, e.g. ["patient","provider"] (sent as include[]). |
| per_page | integer | Items per page (pagination). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| patient_id | integer | Filter to one patient. |
| location_id | integer | Restrict to a single location id. |
| provider_id | integer | Filter to one provider. |
List a patient's insurance coverages. GET /insurance_coverages.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (pagination). |
| per_page | integer | Items per page (pagination). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| patient_id | integer | Patient id to fetch coverages for. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (pagination).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 1000,
"description": "Items per page (pagination).",
"exclusiveMinimum": 0
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"patient_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Patient id to fetch coverages for."
}
}
}List insurance plans known to the institution, optionally scoped to a location. GET /insurance_plans.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (pagination). |
| per_page | integer | Items per page (pagination). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| location_id | integer | Restrict to a single location id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (pagination).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 1000,
"description": "Items per page (pagination).",
"exclusiveMinimum": 0
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Restrict to a single location id."
}
}
}List the practice locations for an institution (id, name, address). Good first call to discover location_ids for other tools. GET /locations.
| Argument | Type | Description |
|---|---|---|
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
}
}
}List operatories (chairs/rooms) for an institution, optionally scoped to a location. GET /operatories.
| Argument | Type | Description |
|---|---|---|
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| location_id | integer | Restrict to a single location id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Restrict to a single location id."
}
}
}List clinical procedures, optionally scoped to a patient. GET /procedures.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (pagination). |
| per_page | integer | Items per page (pagination). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| patient_id | integer | Filter to one patient's procedures. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (pagination).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 1000,
"description": "Items per page (pagination).",
"exclusiveMinimum": 0
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"patient_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter to one patient's procedures."
}
}
}List practitioners (providers) for an institution, optionally scoped to a location. GET /providers.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (pagination). |
| per_page | integer | Items per page (pagination). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| location_id | integer | Restrict to a single location id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (pagination).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 1000,
"description": "Items per page (pagination).",
"exclusiveMinimum": 0
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Restrict to a single location id."
}
}
}Search patients within a location by name, email, phone, or date of birth. Patient search is always in a location context. GET /patients.
| Argument | Type | Description |
|---|---|---|
| name | string | Full or partial patient name. |
| page | integer | Page number (pagination). |
| sort | string | Sort field/direction, e.g. name or -created_at. |
| string | Patient email filter. | |
| inactive | boolean | Include inactive patients. |
| per_page | integer | Items per page (pagination). |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| location_id* | integer | Location id to search within (REQUIRED). |
| phone_number | string | Patient phone number filter. |
Report the data-sync health for the practice's EHR/PMS integration (is the Synchronizer up to date?). GET /sync_status.
| Argument | Type | Description |
|---|---|---|
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
}
}
}UPDATE / reschedule / cancel / confirm an existing appointment by id. MUTATES DATA in the connected EHR/PMS. PATCH /appointments/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Appointment id to update (path param). |
| note | string | Update the free-text note. |
| cancelled | boolean | Set true to cancel the appointment. |
| confirmed | boolean | Set true to confirm the appointment. |
| subdomain | string | Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset. |
| start_time | string | New start, ISO8601 datetime (reschedule). |
| provider_id | integer | Reassign to a provider. |
| operatory_id | integer | Reassign operatory (chair/room). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Appointment id to update (path param)."
},
"note": {
"type": "string",
"description": "Update the free-text note."
},
"cancelled": {
"type": "boolean",
"description": "Set true to cancel the appointment."
},
"confirmed": {
"type": "boolean",
"description": "Set true to confirm the appointment."
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"start_time": {
"type": "string",
"description": "New start, ISO8601 datetime (reschedule)."
},
"provider_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Reassign to a provider."
},
"operatory_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Reassign operatory (chair/room)."
}
}
}| string |
| Patient phone number. |
| date_of_birth | string | Date of birth, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"location_id",
"provider_id",
"first_name",
"last_name",
"email"
],
"properties": {
"npi": {
"type": "string",
"description": "Provider NPI, sent as provider.npi in the body."
},
"email": {
"type": "string",
"description": "Patient email address."
},
"gender": {
"type": "string",
"description": "Patient gender."
},
"last_name": {
"type": "string",
"description": "Patient last name."
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"first_name": {
"type": "string",
"description": "Patient first name."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Location id to create the patient in (REQUIRED)."
},
"provider_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Provider id to associate the patient with (REQUIRED)."
},
"phone_number": {
"type": "string",
"description": "Patient phone number."
},
"date_of_birth": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of birth, yyyy-mm-dd."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end": {
"type": "string",
"description": "Window end, ISO8601 datetime."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (pagination).",
"exclusiveMinimum": 0
},
"start": {
"type": "string",
"description": "Window start, ISO8601 datetime."
},
"include": {
"type": "array",
"items": {
"type": "string"
},
"description": "Related resources to embed, e.g. [\"patient\",\"provider\"] (sent as include[])."
},
"per_page": {
"type": "integer",
"maximum": 1000,
"description": "Items per page (pagination).",
"exclusiveMinimum": 0
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"patient_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter to one patient."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Restrict to a single location id."
},
"provider_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter to one provider."
}
}
}| date_of_birth |
| string |
| Patient date of birth, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"location_id"
],
"properties": {
"name": {
"type": "string",
"description": "Full or partial patient name."
},
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (pagination).",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"description": "Sort field/direction, e.g. name or -created_at."
},
"email": {
"type": "string",
"description": "Patient email filter."
},
"inactive": {
"type": "boolean",
"description": "Include inactive patients."
},
"per_page": {
"type": "integer",
"maximum": 1000,
"description": "Items per page (pagination).",
"exclusiveMinimum": 0
},
"subdomain": {
"type": "string",
"description": "Institution subdomain. Defaults to NEXHEALTH_SUBDOMAIN if unset."
},
"location_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Location id to search within (REQUIRED)."
},
"phone_number": {
"type": "string",
"description": "Patient phone number filter."
},
"date_of_birth": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Patient date of birth, yyyy-mm-dd."
}
}
}