NexHealth MCP by usefulapi

Read and write NexHealth appointments, patients, providers and locations.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
94%
Naming quality
76%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'nexhealth_list_appointment_slots' name length outside 3-30 rangein nexhealth_list_appointment_slots
  • LOWTool 'nexhealth_list_appointment_types' name length outside 3-30 rangein nexhealth_list_appointment_types
  • LOWTool 'nexhealth_list_insurance_coverages' name length outside 3-30 rangein nexhealth_list_insurance_coverages

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,528Tokens (tool definitions)
~2.0 KBTypical response size
Significant attention impact (2.76% of 128k context)

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-http

What it can do

Tool inventory

Tools (16)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded16 tools
verifiedversion not recorded16 tools