Built by Metorial, the integration platform for agentic AI.

Learn More

mcp

charmhealth-mcp-server

CharmHealth MCP Server

An MCP server for CharmHealth EHR that allows LLMs and MCP clients to interact with patient records, encounters, and practice information.

What is an MCP Server?

MCP Info

AttributeDetails
Docker Imagemcp/charmhealth-mcp-server
AuthorCharmHealth
Repositoryhttps://github.com/CharmHealth/charm-mcp-server

Image Building Info

AttributeDetails
Dockerfilehttps://github.com/CharmHealth/charm-mcp-server/blob/b605438d97c13536295f8dbab17afb0e1e269548/Dockerfile
Commitb605438d97c13536295f8dbab17afb0e1e269548
Docker Image built byDocker Inc.
Docker Scout Health ScoreDocker Scout Health Score
Verify SignatureCOSIGN_REPOSITORY=mcp/signatures cosign verify mcp/charmhealth-mcp-server --key https://raw.githubusercontent.com/docker/keyring/refs/heads/main/public/mcp/latest.pub
LicenceMIT License

Available Tools (14)

Tools provided by this ServerShort Description
findPatientsFind patients.
getPracticeInfoGet practice information.
manageAppointmentsManage appointments.
manageEncounterManage encounters.
managePatientManage patients.
managePatientAllergiesManage patient allergies.
managePatientDiagnosesManage patient diagnoses.
managePatientDrugsManage patient drugs and supplements.
managePatientFilesManage patient files and documents.
managePatientLabsManage patient laboratory results.
managePatientNotesManage patient notes.
managePatientRecallsManage patient recalls.
managePatientVitalsManage patient vitals and vital signs.
reviewPatientHistoryReview patient history.

Tools Details

Tool: findPatients

Find patients.

Find patients quickly using natural search terms or specific criteria. Handles everything from "find John Smith" to complex searches like "elderly diabetes patients in California". Essential first step for any patient-related task.

Quick searches: Use search_type="name" with query="John Smith" for basic name searches Phone lookups: Use search_type="phone" with query="555-1234" (handles any format) Medical record: Use search_type="record_id" with query="MR123456"

Complex searches: Use search_type="advanced" with multiple criteria:

  • Age ranges: age_min=65, age_max=80 for elderly patients
  • Location: state="CA", city="Los Angeles" for geographic filtering
  • Medical: blood_group="O+", language="Spanish" for clinical needs

Always returns patient_id needed for other tools. Start here before any patient operations.

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
age_maxstring optional
age_minstring optional
blood_groupstring optional
category_idstring optional
citystring optional
countrystring optional
created_afterstring optional
created_beforestring optional
facility_idstring optional
genderstring optional
has_phr_accountstring optional
languagestring optional
limitstring optional
marital_statusstring optional
modified_afterstring optional
modified_beforestring optional
pagestring optional
postal_codestring optional
querystring optional
search_typestring optional
sort_bystring optional
sort_orderstring optional
statestring optional
statusstring optional

Tool: getPracticeInfo

Get practice information.

Get essential practice information needed for other operations - available facilities, providers, vital signs templates, etc. Use this to understand practice setup and get IDs for other tools.

  • "facilities": List all practice locations with IDs needed for scheduling
  • "providers": List all providers with IDs needed for appointments and encounters
  • "vitals": Available vital sign templates for documentation
  • "overview": Summary of practice setup with key counts and recent activity

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
info_typestring optional

Tool: manageAppointments

Manage appointments.

Complete appointment lifecycle management - schedule new appointments, reschedule existing ones, cancel appointments, and list appointments with flexible filtering. Handles the full appointment workflow.

Actions:

  • "schedule": Create new appointment (requires patient_id, provider_id, facility_id, appointment_date, appointment_time). Check the provider's availability with manageAppointments(action='list') and provider_id, and across all facilities for the provider before suggesting a time.
  • "reschedule": Change existing appointment time (requires appointment_id + new scheduling details)
  • "cancel": Cancel appointment (requires appointment_id + cancel_reason)
  • "list": Show appointments with filtering (requires start_date, end_date_range, facility_ids)

Time format: Use 12-hour format like "09:30 AM" or "02:15 PM" For recurring: Set repetition to "Weekly" or "Daily" and provide frequency + end_date For double booking: Use provider_double_booking="allow" or resource_double_booking="allow" to override checks For cancellation: Use delete_type "Current" for single appointment or "Entire" for recurring series

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
appointment_datestring optional
appointment_idstring optional
appointment_timestring optional
cancel_reasonstring optional
consent_formsstring optional
delete_typestring optional
duration_minutesstring optional
end_datestring optional
end_date_rangestring optional
facility_idstring optional
facility_idsstring optional
frequencystring optional
member_idsstring optional
message_to_patientstring optional
modestring optional
patient_idstring optional
provider_double_bookingstring optional
provider_idstring optional
questionnairestring optional
reasonstring optional
receipt_idstring optional
repetitionstring optional
resource_double_bookingstring optional
resource_idstring optional
start_datestring optional
statusstring optional
status_idsstring optional
visit_type_idstring optional
weekly_daysstring optional

Tool: manageEncounter

Manage encounters.

Complete encounter workflow - create, review, and sign encounters with comprehensive clinical documentation. Essential for clinical workflow from initial documentation through final signature.

Actions:

  • "create": Create new encounter and document clinical findings (default)
  • "review": Display complete encounter details for review before signing
  • "sign": Electronically sign encounter after review and confirmation
  • "unlock": Unlock a previously signed encounter to allow modifications

For creating encounters:

  • Requires: patient_id, provider_id, facility_id, encounter_date
  • Optional: appointment_id (to create from existing appointment), visit_type_id, encounter_mode, chief_complaint

For reviewing encounters:

  • Requires: patient_id, encounter_id
  • Shows comprehensive encounter details including vitals, diagnoses, medications, notes

For signing encounters:

  • Requires: patient_id, encounter_id
  • Only use after reviewing and confirming all information is accurate

For unlocking encounters:

  • Requires: patient_id, encounter_id, reason
  • Used to unlock signed encounters when modifications are needed
  • Must provide a valid reason for unlocking the encounter

Recommended workflow:

  1. Create encounter: manageEncounter(patient_id, provider_id, facility_id, encounter_date, action="create")
  2. Add clinical data using managePatientVitals(), managePatientDrugs(), managePatientDiagnoses()
  3. Review before signing: manageEncounter(patient_id, encounter_id, action="review")
  4. Sign to finalize: manageEncounter(patient_id, encounter_id, action="sign")
  5. If modifications needed: manageEncounter(patient_id, encounter_id, reason="reason for changes", action="unlock")

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
patient_idstring
actionstring optional
appointment_idstring optional
chief_complaintstring optional
encounter_datestring optional
encounter_idstring optional
encounter_modestring optional
facility_idstring optional
provider_idstring optional
reasonstring optional
visit_type_idstring optional

Tool: managePatient

Manage patients.

Complete patient management with comprehensive demographic, social, and administrative data. Handles patient creation, updates, status changes, and complex relationships. Supports all CharmHealth patient data fields for complete EHR functionality.

Actions:

  • "create": Add new patient (requires first_name, last_name, gender, date_of_birth OR age, facility_ids)
  • "update": Modify existing patient (requires patient_id + fields to change).
  • "activate": Reactivate deactivated patient (requires patient_id only)
  • "deactivate": Deactivate patient (requires patient_id only)

Update Modes:

  • update_specific_details=True: Only updates the fields you provide, preserves all other existing data (RECOMMENDED, Default)
  • update_specific_details=False: Complete record update - must provide all fields or existing data will be lost

Demographics: Supports comprehensive patient information including social history, family data Addresses: If any address field provided, country is required (defaults to US) Facilities: Pass as list of facility IDs like "facility_123,facility_456". Categories: Pass as list like [{"category_id": "category_123"}]

Complex Relationships:

  • caregivers: [{"first_name": str, "last_name": str, "relationship": str, "contact": {...}, "address": {...}}]
  • guarantor: [{"first_name": str, "last_name": str, "relationship": str, "contact": {...}, "address": {...}}]
  • id_qualifiers: [{"id_qualifier": 1-8 or 99, "id_of_patient": "ID_value"}]

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
address_line1string optional
address_line2string optional
agestring optional
areastring optional
birth_orderstring optional
blood_groupstring optional
caregiversstring optional
categoriesstring optionalCategories: Pass as list like [{"category_id": "category_123"}]
cause_of_deathstring optional
citystring optional
countrystring optional
county_codestring optional
custom_field_1string optional
custom_field_2string optional
custom_field_3string optional
custom_field_4string optional
custom_field_5string optional
date_of_birthstring optional
deceasedstring optional
districtstring optional
dodstring optional
duplicate_checkstring optional
emailstring optional
email_notificationstring optional
emergency_contact_namestring optional
emergency_contact_phonestring optional
emergency_extnstring optional
employment_statusstring optional
ethnicitystring optional
facility_idsstring optional
first_namestring optional
genderstring optional
gender_identitystring optional
guarantorstring optional
home_phonestring optional
id_qualifiersstring optional
introductionstring optional
is_multiple_birthstring optional
languagestring optional
last_namestring optional
linked_patient_idstring optional
maiden_namestring optional
marital_statusstring optional
middle_namestring optional
mother_first_namestring optional
mother_last_namestring optional
nick_namestring optional
patient_idstring optional
payment_end_datestring optional
payment_sourcestring optional
payment_start_datestring optional
phonestring optional
post_boxstring optional
preferred_communicationstring optional
primary_phonestring optional
racestring optional
record_idstring optional
rep_first_namestring optional
rep_last_namestring optional
send_phr_invitestring optional
sexual_orientationstring optional
smoking_statusstring optional
source_namestring optional
source_valuestring optional
statestring optional
suffixstring optional
text_notificationstring optional
update_specific_detailsstring optional
voice_notificationstring optional
work_phonestring optional
work_phone_extnstring optional
zip_codestring optional

Tool: managePatientAllergies

Manage patient allergies.

Critical allergy management with safety alerts - document patient allergies, update allergy information, and maintain allergy safety checks. Essential for safe prescribing and clinical decision-making.

Actions:

  • "add": Document new allergy (requires allergen, allergy_type, severity, reactions, allergy_date)
  • "list": Show all patient allergies (requires only patient_id)
  • "update": Modify existing allergy (requires record_id + fields to change)
  • "delete": Remove allergy record (requires record_id)

Safety critical: Always check allergies before prescribing medications. Common allergens: "Penicillin", "Latex", "Shellfish", "Nuts", "Contrast dye" Severity levels: "Mild", "Moderate", "Severe", "Life-threatening"

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
patient_idstring
allergenstring optional
allergy_datestring optional
allergy_statusstring optional
allergy_typestring optional
commentsstring optional
reactionsstring optional
record_idstring optional
severitystring optional

Tool: managePatientDiagnoses

Manage patient diagnoses.

Complete diagnosis management for patient problem lists - add new diagnoses, update existing conditions, and maintain accurate medical problem lists. Essential for clinical reasoning and care planning.

Actions:

  • "add": Add new diagnosis (requires diagnosis_name, diagnosis_code, code_type)
  • "list": Show all patient diagnoses (optionally filter by encounter_id)
  • "update": Modify existing diagnosis (requires record_id + fields to change)
  • "delete": Remove diagnosis (requires record_id). Ask the user if they are sure they want to delete the diagnosis before proceeding.

Code types: "ICD10", "SNOMED" Status options: "Active", "Inactive", "Resolved" Use encounter_id to link diagnosis to specific visit for billing and documentation

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
patient_idstring
code_typestring optional
commentsstring optional
diagnosis_codestring optional
diagnosis_namestring optional
diagnosis_orderstring optional
diagnosis_statusstring optional
encounter_idstring optional
from_datestring optional
record_idstring optional
to_datestring optional

Tool: managePatientDrugs

Manage patient drugs and supplements.

Unified drug management for medications, supplements, and vitamins - prescribe medications, document supplements, manage drug interactions. Includes automatic allergy checking and comprehensive drug safety workflow for optimal patient care.

Actions:

  • "add": Prescribe new drug (requires drug_name, directions for medications; drug_name, dosage for supplements)
  • "update": Modify existing prescription (requires record_id + fields to change)
  • "discontinue": Stop drug (requires record_id)
  • "list": Show all patient drugs by type (optionally filter by substance_type)

Substance Types:

  • "medication": Prescription drugs (requires directions, refills)
  • "supplement": OTC supplements/vitamins (requires dosage as integer)
  • "vitamin": Specific vitamins (requires dosage as integer)

Safety: Automatically checks allergies before prescribing unless check_allergies=False For medications: Use clear directions like "Take 1 tablet by mouth twice daily with food" For supplements: Provide dosage as integer (e.g., 5) and use strength for units (e.g., "500mg")

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
patient_idstring
check_allergiesstring optional
commentsstring optional
directionsstring optional
dosagestring optional
dosage_unitstring optional
dose_formstring optional
drug_namestring optional
encounter_idstring optional
end_datestring optional
frequencystring optional
intake_typestring optional
quantitystring optional
record_idstring optional
refillsstring optional
routestring optional
start_datestring optional
statusstring optional
strengthstring optional
substance_typestring optional
weaning_schedulestring optional

Tool: managePatientFiles

Manage patient files and documents.

Patient file and document management - upload patient photos, manage identity documents, and send PHR (Personal Health Record) invitations. Handles the complete patient file workflow.

Actions:

  • "upload_photo": Upload patient photo (requires photo_file path)
  • "delete_photo": Remove patient photo (requires only patient_id)
  • "upload_id": Upload identity document (requires id_file, id_qualifier)
  • "send_phr_invite": Send PHR portal invitation (requires email)

ID Qualifiers: military_id, state_issued_id, drivers_license_id, passport_id, social_security_number, etc. File paths should be absolute paths to image/PDF files on the system.

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
patient_idstring
emailstring optional
id_filestring optional
id_of_patientstring optional
id_qualifierstring optional
photo_filestring optional
rep_first_namestring optional
rep_last_namestring optional

Tool: managePatientLabs

Manage patient laboratory results.

Complete laboratory results management - list lab results, get detailed reports, and add new lab results. Handles the full lab workflow for clinical decision-making.

Actions:

  • "list": Show lab results with filtering (optionally filter by patient_id, reviewer_id, status)
  • "get_details": Get detailed lab report (requires group_id OR lab_order_id)
  • "add_result": Add new lab results (requires patient_id + result_details)

For detailed results: Use group_id for result groups or lab_order_id for specific orders For adding results: Provide structured result_details with tests, parameters, and values Status codes: 0 for pending, 2 for final results

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
group_idstring optional
is_ascendingstring optional
lab_order_idstring optional
no_of_recordsstring optional
patient_idstring optional
result_detailsstring optional
reviewer_idstring optional
sort_bystring optional
start_indexstring optional
statusstring optional

Tool: managePatientNotes

Manage patient notes.

Quick clinical note management for important patient information - add care notes, provider communications, and clinical observations that need to be highlighted across all patient interactions.

Actions:

  • "add": Add new clinical note (requires notes content)
  • "list": Show all patient notes (requires only patient_id)
  • "update": Modify existing note (requires record_id + notes content)
  • "delete": Remove note (requires record_id). Ask the user if they are sure they want to delete the note before proceeding.

Use for: Important care instructions, provider alerts, patient preferences, social determinants Formal encounter notes should use manageEncounter() instead

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
patient_idstring
notesstring optional
record_idstring optional

Tool: managePatientRecalls

Manage patient recalls.

Patient recall and follow-up management - schedule preventive care reminders, follow-up appointments, and care plan reminders. Ensures patients receive timely care according to clinical guidelines.

Actions:

  • "add": Schedule new recall (requires recall_type, notes, provider_id, facility_id)
  • "list": Show all patient recalls (requires only patient_id)
  • "update": Modify existing recall (requires record_id + fields to change)
  • "delete": Remove recall (requires record_id). Ask the user if they are sure they want to delete the recall before proceeding.

Common recall types: "Annual Physical", "Mammogram", "Colonoscopy", "Lab Follow-up", "Medication Review" Reminder timing: email_reminder_before/text_reminder_before in days (e.g., 7 for one week) Use getPracticeInfo() to get valid provider_id and facility_id values

When required parameters are missing, ask the user to provide the specific values rather than proceeding with defaults or auto-generated values.

ParametersTypeDescription
actionstring
patient_idstring
email_reminder_beforestring optional
encounter_idstring optional
facility_idstring optional
notesstring optional
provider_idstring optional
recall_datestring optional
recall_periodstring optional
recall_timestring optional
recall_timeunitstring optional
recall_typestring optional
record_idstring optional
send_email_reminderstring optional
send_text_reminderstring optional
text_reminder_beforestring optional

Tool: managePatientVitals

Manage patient vitals and vital signs.

Complete patient vital signs management - record vitals during encounters, review vital trends, update incorrect readings, and track patient health metrics over time. Essential for clinical monitoring.

Actions:

  • "add": Record new vitals (requires patient_id + encounter_id + vitals dict OR individual vital fields). Check available vitals with getPracticeInfo(info_type='vitals') first to ensure all vital names and units are correct.
  • "list": Show patient vital history (optionally filter by date range)
  • "update": Modify existing vital record (requires record_id + fields to change)
  • "delete": Remove incorrect vital record (requires record_id)

Vitals Format:

  • As dict: {"Weight": "70 kg", "BP": "120/80 mmHg", "Pulse": "72 bpm", "Temperature": "98.6 F"}
  • Ind

[...]