NexHealth MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi
Read and write NexHealth appointments, patients, providers and locations.
16 tools: 3 can delete or cancel things, 1 change things and 12 only read.
Scanned Oct 21, 2026
- Deletes or cancels3Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads12Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http nexhealth https://nexhealth.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "nexhealth_sync_status" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "nexhealth_sync_status" says "sync": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
16 tools
Deletes or cancels 3Claude Code: deny
nexhealth_book_appointmentBOOK a new appointment.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote 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.
Annotations the server declares
- title: Book appointment
- destructiveHint: true
nexhealth_create_patientCREATE a new patient record in a location.No findings
Why it is in this group
- The name "nexhealth_create_patient" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it CREATE a new patient record in a location. MUTATES DATA — writes to the connected EHR/PMS. GET the patient back to confirm. POST /patients.
Annotations the server declares
- title: Create patient
- destructiveHint: true
nexhealth_update_appointmentUPDATE / reschedule / cancel / confirm an existing appointment by id.No findings
Why it is in this group
- The name "nexhealth_update_appointment" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it UPDATE / reschedule / cancel / confirm an existing appointment by id. MUTATES DATA in the connected EHR/PMS. PATCH /appointments/{id}.
Annotations the server declares
- title: Update appointment
- destructiveHint: true
Changes things 1Claude Code: ask
nexhealth_sync_statusReport the data-sync health for the practice's EHR/PMS integration (is the Synchronizer up to date?).1 finding
Why it is in this group
- The name "nexhealth_sync_status" says "sync": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "nexhealth_sync_status" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "nexhealth_sync_status" says "sync": a word for a change.
Description, as the server wrote it Report the data-sync health for the practice's EHR/PMS integration (is the Synchronizer up to date?). GET /sync_status.
Annotations the server declares
- title: Sync status
- readOnlyHint: true
Only reads 12Claude Code: allow
nexhealth_get_appointmentFetch a single appointment by id.No findings
Why it is in this group
- The name "nexhealth_get_appointment" says "get": a word for reading.
Description, as the server wrote it Fetch a single appointment by id. GET /appointments/{id}.
Annotations the server declares
- title: Get appointment
- readOnlyHint: true
nexhealth_get_patientFetch a single patient by id.No findings
Why it is in this group
- The name "nexhealth_get_patient" says "get": a word for reading.
Description, as the server wrote it Fetch a single patient by id. GET /patients/{id}.
Annotations the server declares
- title: Get patient
- readOnlyHint: true
nexhealth_list_appointment_slotsFind bookable appointment start times across providers/locations for a date range.No findings
Why it is in this group
- The name "nexhealth_list_appointment_slots" says "list": a word for reading.
Description, as the server wrote it Find bookable appointment start times across providers/locations for a date range. High-value for scheduling. GET /appointment_slots.
Annotations the server declares
- title: List appointment slots
- readOnlyHint: true
nexhealth_list_appointment_typesList the appointment types configured for an institution/location.No findings
Why it is in this group
- The name "nexhealth_list_appointment_types" says "list": a word for reading.
Description, as the server wrote it List the appointment types configured for an institution/location. GET /appointment_types.
Annotations the server declares
- title: List appointment types
- readOnlyHint: true
nexhealth_list_appointmentsList appointments in a date/time window, optionally filtered by location, patient, or provider.No findings
Why it is in this group
- The name "nexhealth_list_appointments" says "list": a word for reading.
Description, as the server wrote it List appointments in a date/time window, optionally filtered by location, patient, or provider. GET /appointments.
Annotations the server declares
- title: List appointments
- readOnlyHint: true
nexhealth_list_insurance_coveragesList a patient's insurance coverages.No findings
Why it is in this group
- The name "nexhealth_list_insurance_coverages" says "list": a word for reading.
Description, as the server wrote it List a patient's insurance coverages. GET /insurance_coverages.
Annotations the server declares
- title: List insurance coverages
- readOnlyHint: true
nexhealth_list_insurance_plansList insurance plans known to the institution, optionally scoped to a location.No findings
Why it is in this group
- The name "nexhealth_list_insurance_plans" says "list": a word for reading.
Description, as the server wrote it List insurance plans known to the institution, optionally scoped to a location. GET /insurance_plans.
Annotations the server declares
- title: List insurance plans
- readOnlyHint: true
nexhealth_list_locationsList the practice locations for an institution (id, name, address).No findings
Why it is in this group
- The name "nexhealth_list_locations" says "list": a word for reading.
Description, as the server wrote it List the practice locations for an institution (id, name, address). Good first call to discover location_ids for other tools. GET /locations.
Annotations the server declares
- title: List locations
- readOnlyHint: true
nexhealth_list_operatoriesList operatories (chairs/rooms) for an institution, optionally scoped to a location.No findings
Why it is in this group
- The name "nexhealth_list_operatories" says "list": a word for reading.
Description, as the server wrote it List operatories (chairs/rooms) for an institution, optionally scoped to a location. GET /operatories.
Annotations the server declares
- title: List operatories
- readOnlyHint: true
nexhealth_list_proceduresList clinical procedures, optionally scoped to a patient.No findings
Why it is in this group
- The name "nexhealth_list_procedures" says "list": a word for reading.
Description, as the server wrote it List clinical procedures, optionally scoped to a patient. GET /procedures.
Annotations the server declares
- title: List procedures
- readOnlyHint: true
nexhealth_list_providersList practitioners (providers) for an institution, optionally scoped to a location.No findings
Why it is in this group
- The name "nexhealth_list_providers" says "list": a word for reading.
Description, as the server wrote it List practitioners (providers) for an institution, optionally scoped to a location. GET /providers.
Annotations the server declares
- title: List providers
- readOnlyHint: true
nexhealth_search_patientsSearch patients within a location by name, email, phone, or date of birth.No findings
Why it is in this group
- The name "nexhealth_search_patients" says "search": a word for reading.
Description, as the server wrote it Search patients within a location by name, email, phone, or date of birth. Patient search is always in a location context. GET /patients.
Annotations the server declares
- title: Search patients
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.16.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http nexhealth https://nexhealth.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__nexhealth__nexhealth_list_locations",
"mcp__nexhealth__nexhealth_list_providers",
"mcp__nexhealth__nexhealth_search_patients",
"mcp__nexhealth__nexhealth_get_patient",
"mcp__nexhealth__nexhealth_list_appointments",
"mcp__nexhealth__nexhealth_get_appointment",
"mcp__nexhealth__nexhealth_list_appointment_slots",
"mcp__nexhealth__nexhealth_list_appointment_types",
"mcp__nexhealth__nexhealth_list_operatories",
"mcp__nexhealth__nexhealth_list_insurance_plans",
"mcp__nexhealth__nexhealth_list_insurance_coverages",
"mcp__nexhealth__nexhealth_list_procedures"
],
"ask": [
"mcp__nexhealth__nexhealth_sync_status"
],
"deny": [
"mcp__nexhealth__nexhealth_create_patient",
"mcp__nexhealth__nexhealth_book_appointment",
"mcp__nexhealth__nexhealth_update_appointment"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as nexhealth. Review it before you use it.