LabStore
← All labs

CharmHealth

by docker ✓ verified ✓ Packaged by Docker

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

MCP server installable needs setup network: on runtime: sysbox

Project Management MCP Servers

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

Attribute Details
Docker Image mcp/charmhealth-mcp-server
Author CharmHealth
Repository https://github.com/CharmHealth/charm-mcp-server

Image Building Info

Attribute Details
Dockerfile https://github.com/CharmHealth/charm-mcp-server/blob/dae9f695b9ba82026959574d58db7e941703f026/Dockerfile
Commit dae9f695b9ba82026959574d58db7e941703f026
Docker Image built by Docker Inc.
Docker Scout Health Score Docker Scout Health Score
Verify Signature COSIGN_REPOSITORY=mcp/signatures cosign verify mcp/charmhealth-mcp-server --key https://raw.githubusercontent.com/docker/keyring/refs/heads/main/public/mcp/latest.pub
Licence MIT License

Available Tools (17)

Tools provided by this Server Short Description
findPatients Find patients.
getPracticeInfo Get practice information.
manageAppointments Manage appointments.
manageEncounter Manage encounters.
manageFax Send faxes and check fax delivery status.
manageMessages Manage patient and provider messaging across SMS, WhatsApp, and secure messaging channels.
managePatient Manage patients.
managePatientAllergies Manage patient allergies.
managePatientDiagnoses Manage patient diagnoses.
managePatientDrugs Manage patient drugs and supplements.
managePatientFiles Manage patient files and documents.
managePatientLabs Manage patient laboratory results.
managePatientNotes Manage patient notes.
managePatientRecalls Manage patient recalls.
managePatientVitals Manage patient vitals and vital signs.
manageTasks Manage CharmHealth tasks.
reviewPatientHistory Review patient history.

Tools Details

Tool: findPatients

Find patients.

<usecase> 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. </usecase> <instructions> 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. </instructions>

Parameters Type Description
age_max string optional
age_min string optional
blood_group string optional
category_id string optional
city string optional
country string optional
created_after string optional
created_before string optional
facility_id string optional
gender string optional
has_phr_account string optional
language string optional
limit string optional
marital_status string optional
modified_after string optional
modified_before string optional
page string optional
postal_code string optional
query string optional
search_type string optional
sort_by string optional
sort_order string optional
state string optional
status string optional

Tool: getPracticeInfo

Get practice information.

<usecase> 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. </usecase> <instructions> - "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 - "templates": List all available SOAP templates (id, name, type) for the practice - "template_details": Full template schema (widgets + entries) for given template_ids (comma-separated)

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

Parameters Type Description
info_type string optional
template_ids string optional

Tool: manageAppointments

Manage appointments.

<usecase> Complete appointment lifecycle management - schedule new appointments, reschedule existing ones, cancel appointments, and list appointments with flexible filtering. Handles the full appointment workflow. </usecase> <instructions> 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; optionally filter by status/provider/mode)

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

List filters (applied after fetching all appointments in the date range):

  • status_filter: e.g., status_filter="Confirmed"
  • provider_filter: provider_id or provider_name substring (e.g., provider_filter="12345" or provider_filter="Smith")
  • mode_filter: e.g., mode_filter="Video Consult"
  • limit: e.g., limit=25

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

Parameters Type Description
action string
appointment_date string optional
appointment_id string optional
appointment_time string optional
cancel_reason string optional
consent_forms string optional
delete_type string optional
duration_minutes string optional
end_date string optional
end_date_range string optional
facility_id string optional
facility_ids string optional
frequency string optional
limit string optional
member_ids string optional
message_to_patient string optional
mode string optional
mode_filter string optional
patient_id string optional
provider_double_booking string optional
provider_filter string optional
provider_id string optional
questionnaire string optional
reason string optional
receipt_id string optional
repetition string optional
resource_double_booking string optional
resource_id string optional
start_date string optional
status string optional
status_filter string optional
status_ids string optional
visit_type_id string optional
weekly_days string optional

Tool: manageEncounter

Manage encounters.

<usecase> Complete encounter workflow - create, review, and sign encounters with comprehensive clinical documentation. Essential for clinical workflow from initial documentation through final signature. </usecase> <instructions> Actions: - "list": List encounters for a patient (requires patient_id; optionally filter by filter_by, start_date, end_date, per_page, page) - "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 (two paths):

  • From appointment: patient_id + appointment_id (provider/facility/date come from the appointment)
  • From scratch: patient_id + provider_id + facility_id + encounter_date
  • Optional: 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

For updating encounters with template data:

  • action="update" with chief_complaint always saved as narrative fallback
  • template_ids: comma-separated IDs of templates to attach to the encounter
  • entries: JSON array string of populated template entries, e.g. '[{"entry_id":"123","answer":"text"}]'
  • Templates are attached first, then entries + chief_complaints saved together
  • entry_id values must come from getPracticeInfo(info_type='template_details') — hallucinated IDs are dropped client-side

Recommended workflow:

  1. Create encounter: manageEncounter(patient_id, appointment_id, action="create") — or without appointment: 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. </instructions>

Parameters Type Description
patient_id string
action string optional
appointment_id string optional
chief_complaint string optional
encounter_date string optional
encounter_id string optional
encounter_mode string optional
end_date string optional
entries string optional
facility_id string optional
filter_by string optional
page string optional
per_page string optional
provider_id string optional
reason string optional
start_date string optional
template_ids string optional
visit_type_id string optional

Tool: manageFax

Send faxes and check fax delivery status.

<usecase> Fax clinical documents (referrals, records, prior auth forms) to providers, facilities, pharmacies, and insurance companies. Check delivery status of sent faxes. </usecase> <instructions> Actions: - "send": Fax a document (requires recipient_fax_number, recipient_name, document_content_base64). document_content_base64 must be a base64-encoded PDF. Optionally include subject, remarks, and reference for the cover page. facility_id determines which facility's fax credentials and return number are used.
  • "status": Check fax delivery status (requires fax_id). Status values: QUEUED, SENT, FAILED, YET_TO_SEND.

Common fax use cases:

  • Referral letters to specialists
  • Medical records requests
  • Prior authorization forms to insurance
  • Prescription orders to pharmacies without e-prescribe </instructions>
Parameters Type Description
action string
document_content_base64 string optional
facility_id string optional
fax_id string optional
recipient_fax_number string optional
recipient_name string optional
reference string optional
remarks string optional
subject string optional

Tool: manageMessages

Manage patient and provider messaging across SMS, WhatsApp, and secure messaging channels.

<usecase> Send messages to patients, read inbox messages, and retrieve conversation threads. Supports SMS (Twilio/Telnyx), WhatsApp Business, and secure portal messaging. Use this for patient communication, follow-ups, appointment confirmations, and responding to patient inquiries. </usecase> <instructions> Actions: - "send": Send a message to a patient (requires patient_id, content, and facility_id). Channel options: - "sms": Send via text message (patient must have TEXT_NOTIFY_ENABLED) - "whatsapp": Send via WhatsApp (patient must be opted in) - "secure": Send via secure portal message (requires subject) - "auto": Automatically select best available channel (default) facility_id is required for all channels. Use getPracticeInfo() to look up facility IDs. For WhatsApp templates, provide template_name and placeholder values. For secure messages to providers, use recipient_member_ids.
  • "list": Show recent secure portal messages from inbox. Filter by section: "FROM_PATIENTS" (inbox) or "TO_PATIENTS" (sent). Use facility_id to filter by facility. Note: SMS and WhatsApp conversations are not available via list — use action='get_thread' with a patient_id to retrieve those.

  • "get_thread": Get full conversation history with a specific patient (requires patient_id). Filter by thread_channel to see only SMS, WhatsApp, secure, or all channels.

Before sending clinical content, confirm with the provider. Routine messages (appointment reminders, general notifications) can be sent directly. </instructions>

Parameters Type Description
action string
channel string optional
content string optional
facility_id string optional
message_type string optional
page string optional
page_size string optional
patient_id string optional
recipient_member_ids string optional
section string optional
subject string optional
template_body_placeholders string optional
template_header_placeholders string optional
template_name string optional
thread_channel string optional

Tool: managePatient

Manage patients.

<usecase> 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. </usecase> <instructions> 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. </instructions>

Parameters Type Description
action string
address_line1 string optional
address_line2 string optional
age string optional
area string optional
birth_order string optional
blood_group string optional
caregivers string optional
categories string optional Categories: Pass as list like [{"category_id": "category_123"}]
cause_of_death string optional
city string optional
country string optional
county_code string optional
custom_field_1 string optional
custom_field_2 string optional
custom_field_3 string optional
custom_field_4 string optional
custom_field_5 string optional
date_of_birth string optional
deceased string optional
district string optional
dod string optional
duplicate_check string optional
email string optional
email_notification string optional
emergency_contact_name string optional
emergency_contact_phone string optional
emergency_extn string optional
employment_status string optional
ethnicity string optional
facility_ids string optional
first_name string optional
gender string optional
gender_identity string optional
guarantor string optional
home_phone string optional
id_qualifiers string optional
introduction string optional
is_multiple_birth string optional
language string optional
last_name string optional
linked_patient_id string optional
maiden_name string optional
marital_status string optional
middle_name string optional
mother_first_name string optional
mother_last_name string optional
nick_name string optional
patient_id string optional
payment_end_date string optional
payment_source string optional
payment_start_date string optional
phone string optional
post_box string optional
preferred_communication string optional
primary_phone string optional
race string optional
record_id string optional
rep_first_name string optional
rep_last_name string optional
send_phr_invite string optional
sexual_orientation string optional
smoking_status string optional
source_name string optional
source_value string optional
state string optional
suffix string optional
text_notification string optional
update_specific_details string optional
voice_notification string optional
work_phone string optional
work_phone_extn string optional
zip_code string optional

Tool: managePatientAllergies

Manage patient allergies.

<usecase> 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. </usecase> <instructions> Actions: - "add": Document new allergy (requires allergen, allergy_type, severity, reactions, allergy_date) - "list": Show all patient allergies (optionally filter by severity/type) - "update": Modify existing allergy (requires record_id, allergen, allergy_type, severity, allergy_status — use action='list' first to get current values, then pass all required fields with your changes) - "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" Allergy types: "Medication", "Drug Substance", "Environmental", "Food", "Plant", "Animal", "Latex" Status values: "Active", "Inactive"

List filters:

  • severity_filter: e.g., severity_filter="Severe"
  • type_filter: e.g., type_filter="Drug"
  • limit: e.g., limit=50

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

Parameters Type Description
action string
patient_id string
allergen string optional
allergy_date string optional
allergy_status string optional
allergy_type string optional
comments string optional
limit string optional
reactions string optional
record_id string optional
severity string optional
severity_filter string optional
type_filter string optional

Tool: managePatientDiagnoses

Manage patient diagnoses.

<usecase> 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. </usecase> <instructions> Actions: - "add": Add new diagnosis (requires diagnosis_name, diagnosis_code, code_type) - "list": Show all patient diagnoses (optionally filter by status, code type, and/or date range) - "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" List filters:

  • status_filter: filter by diagnosis_status (e.g., status_filter="Active")
  • code_type_filter: filter by code_type (e.g., code_type_filter="ICD10")
  • from_date / to_date: best-effort date filtering (e.g., from_date="2025-01-01", to_date="2025-12-31")
  • limit: e.g., limit=25 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. </instructions>

Parameters Type Description
action string
patient_id string
code_type string optional
code_type_filter string optional
comments string optional
diagnosis_code string optional
diagnosis_name string optional
diagnosis_order string optional
diagnosis_status string optional
encounter_id string optional
from_date string optional
limit string optional
record_id string optional
status_filter string optional
to_date string optional

Tool: managePatientDrugs

Manage patient drugs and supplements.

<usecase> 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. </usecase> <instructions> 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). IMPORTANT: drug name and strength CANNOT be changed via update — use discontinue + add instead. Updatable fields: directions, dispense, refills, status. - "discontinue": Stop drug (requires record_id) - "list": Show all patient drugs by type (filter by substance_type, optionally filter by status)

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 List filters:

  • status_filter: e.g., status_filter="active"
  • limit: e.g., limit=25 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. </instructions>

Parameters Type Description
action string
patient_id string
check_allergies string optional
comments string optional
directions string optional
dosage string optional
dosage_unit string optional
dose_form string optional
drug_name string optional
encounter_id string optional
end_date string optional
frequency string optional
intake_type string optional
limit string optional
quantity string optional
record_id string optional
refills string optional
route string optional
start_date string optional
status string optional
status_filter string optional
strength string optional
substance_type string optional
weaning_schedule string optional

Tool: managePatientFiles

Manage patient files and documents.

<usecase> Patient file and document management - upload patient photos, manage identity documents, and send PHR (Personal Health Record) invitations. Handles the complete patient file workflow. </usecase> <instructions> 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. </instructions>

Parameters Type Description
action string
patient_id string
email string optional
id_file string optional
id_of_patient string optional
id_qualifier string optional
photo_file string optional
rep_first_name string optional
rep_last_name string optional

Tool: managePatientLabs

Manage patient laboratory results.

<usecase> Laboratory results management - list lab results and get detailed reports. Lab results arrive automatically from integrated labs (LabCorp, Quest). For manual entry, use the CharmHealth web portal. </usecase> <instructions> Actions: - "list": Show lab results with filtering (optionally filter by patient_id, reviewer_id, status, date range) - "get_details": Get detailed lab report (requires group_id OR lab_order_id) For detailed results: Use group_id for result groups or lab_order_id for specific orders Status codes: 0 for pending, 2 for final results

List filters (in addition to API parameters):

  • status_filter: 0 (pending) or 2 (final)
  • from_date / to_date: e.g., from_date="2025-01-01", to_date="2025-12-31" (best-effort against common date fields)
  • limit: e.g., limit=50

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

Parameters Type Description
action string
from_date string optional
group_id string optional
is_ascending string optional
lab_order_id string optional
limit string optional
no_of_records string optional
patient_id string optional
reviewer_id string optional
sort_by string optional
start_index string optional
status string optional
status_filter string optional
to_date string optional

Tool: managePatientNotes

Manage patient notes.

<usecase> 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. </usecase> <instructions> Actions: - "add": Add new clinical note (requires notes content) - "list": Show all patient notes (optionally filter by date range) - "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

List filters:

  • from_date / to_date: e.g., from_date="2025-01-01", to_date="2025-12-31"
  • limit: e.g., limit=50

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

Parameters Type Description
action string
patient_id string
from_date string optional
limit string optional
notes string optional
record_id string optional
to_date string optional

Tool: managePatientRecalls

Manage patient recalls.

<usecase> 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. </usecase> <instructions> Actions: - "add": Schedule new recall (requires recall_type, notes, provider_id, facility_id) - "list": Show all patient recalls (optionally filter by type/date range) - "update": Modify existing recall (requires record_id, recall_type, notes — use action='list' first to get current values, then pass all required fields with your changes) - "delete": Remove recall (requires record_id). Ask the user if they are sure they want to delete the recall before proceeding.

recall_type is a free-form string set by the practice (e.g. "Office Visit", "Follow-up", "Imaging", "Annual Physical"). Do not invent verbose names — use short descriptive terms. Scheduling: PREFER recall_date (ISO date string, e.g. "2026-07-10"). If using recall_time/recall_timeunit instead, recall_period is also REQUIRED (e.g. recall_time=3, recall_timeunit="Months", recall_period="after") — omitting recall_period causes a server error. 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

List filters:

  • type_filter: e.g., type_filter="Annual Physical"
  • from_date / to_date: e.g., from_date="2025-01-01", to_date="2025-12-31" (compares against recall_date when available)
  • limit: e.g., limit=25

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

Parameters Type Description
action string
patient_id string
email_reminder_before string optional
encounter_id string optional
facility_id string optional
from_date string optional
limit string optional
notes string optional
provider_id string optional
recall_date string optional
recall_period string optional
recall_time string optional
recall_timeunit string optional
recall_type string optional
record_id string optional
send_email_reminder string optional
send_text_reminder string optional
text_reminder_before string optional
to_date string optional
type_filter string optional

Tool: managePatientVitals

Manage patient vitals and vital signs.

<usecase> 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. </usecase> <instructions> Actions: - "add": Record new vitals (requires patient_id + vitals dict OR individual vital fields, plus encounter_id OR entry_date; defaults to today if neither provided). 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 vital name and/or 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: keys are EXACT CharmHealth vital names, values are "value unit" strings. Example: {"Systolic BP": "120 mmHg", "Diastolic BP": "80 mmHg", "Weight": "150 lbs", "Temp": "98 F"}
  • Individual: vital_name="Systolic BP", vital_value="120", vital_unit="mmHg"

IMPORTANT: vital_name must be the exact CharmHealth API name. NEVER include units inside the name. Correct: "Systolic BP" | Wrong: "Systolic BP (mmHg)" or "Blood Pressure" Known names: Weight, Height, BMI, Temp, Systolic BP, Diastolic BP, Pulse Rate, Pulse Pattern, Pulse Volume, Vision Call getPracticeInfo(info_type='vitals') to get the full list of valid names and units for this practice.

List filters:

  • vital_name_filter: e.g., vital_name_filter="Blood Pressure" (matches case-insensitively, substring ok)
  • from_date / to_date: e.g., from_date="2025-01-01", to_date="2025-12-31"
  • limit: e.g., limit=20

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

Parameters Type Description
action string
patient_id string
encounter_id string optional
entry_date string optional
from_date string optional
limit string optional
record_id string optional
to_date string optional
vital_name string optional
vital_name_filter string optional
vital_unit string optional
vital_value string optional
vitals string optional

Tool: manageTasks

Manage CharmHealth tasks.

<usecase> Task management with task creation, updating, and listing. </usecase> <instructions> Actions: - "add": Create new task (requires task, owner_id (look up members using getPracticeInfo()), priority (0-Low, 1-Medium, 2-High, 3-Critical), status (Pending, In-progress, Completed), comments, due_date, reminder_options, tasklist. optional: patient_id if task is related to a patient) - "update": Modify existing task (requires task_id, task, owner_id, priority, status, tasklist — use manageTasks(action='list') first to get current values, then pass all required fields with your changes) - "list": Show tasks with filtering (supports view/date range/pagination plus client-side filters) - "change_status": Change the status of a task (requires task_id (use manageTasks(action='list') to get task_id) + new_status (Pending, In-progress, Completed))

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

List filters:

  • status_filter: filter by status (e.g., status_filter="Pending")
  • priority_filter: "0"-"3" or "Low"/"Medium"/"High"/"Critical"
  • owner_filter: filter by owner_id
  • limit: max tasks to return (applied after filtering)

Examples:

  • manageTasks(action="list", view="MyTasks", status_filter="In-progress", limit=20)
  • manageTasks(action="list", view="All", priority_filter="High", owner_filter="12345") </instructions>
Parameters Type Description
action string
comments string optional
due_date string optional
from_date string optional
limit string optional
owner_filter string optional
owner_id string optional
page string optional
patient_id string optional
per_page string optional
priority string optional
priority_filter string optional
reminder_options string optional
status string optional
status_filter string optional
task string optional
task_id string optional
task_ids string optional
tasklist string optional
to_date string optional
view string optional

Tool: reviewPatientHistory

Review patient history.

<usecase> Get comprehensive patient information including medical history, current medications, recent visits. Perfect for clinical decision-making and preparing for patient encounters. </usecase> <instructions> Returns a consolidated view of patient information organized by medical relevance. By default includes all sections (include_sections=None). Specify include_sections to focus on specific areas. Results include clinical context and suggestions for next actions.

Optional filters (apply to specific sections):

  • diagnosis_status_filter: filter diagnoses by status (e.g., diagnosis_status_filter="Active")
  • medication_status_filter: filter medications by status (e.g., medication_status_filter="active")
  • supplement_status_filter: filter supplements by status (e.g., supplement_status_filter="active")
  • vitals_limit: limit number of vital entries returned (e.g., vitals_limit=10)
  • encounters_limit: limit number of encounters returned (e.g., encounters_limit=5)

For each filtered section, the response includes <section>_total_count and <section>_filtered_count.

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

Parameters Type Description
patient_id string
diagnosis_status_filter string optional
encounters_limit string optional
include_allergies boolean optional
include_appointments boolean optional
include_demographics boolean optional
include_diagnoses boolean optional
include_encounters boolean optional
include_medications boolean optional
include_supplements boolean optional
include_vitals boolean optional
medication_status_filter string optional
supplement_status_filter string optional
vitals_limit string optional

Use this MCP Server

{
  "mcpServers": {
    "charmhealth-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "CHARMHEALTH_BASE_URL",
        "-e",
        "CHARMHEALTH_CLIENT_ID",
        "-e",
        "CHARMHEALTH_CLIENT_SECRET",
        "-e",
        "CHARMHEALTH_REDIRECT_URI",
        "-e",
        "CHARMHEALTH_TOKEN_URL",
        "-e",
        "CHARMHEALTH_API_KEY",
        "-e",
        "CHARMHEALTH_REFRESH_TOKEN",
        "mcp/charmhealth-mcp-server"
      ],
      "env": {
        "CHARMHEALTH_BASE_URL": "your_base_url_here",
        "CHARMHEALTH_CLIENT_ID": "your_client_id_here",
        "CHARMHEALTH_CLIENT_SECRET": "your_client_secret_here",
        "CHARMHEALTH_REDIRECT_URI": "your_redirect_uri_here",
        "CHARMHEALTH_TOKEN_URL": "your_token_url_here",
        "CHARMHEALTH_API_KEY": "<CHARMHEALTH_API_KEY>",
        "CHARMHEALTH_REFRESH_TOKEN": "<CHARMHEALTH_REFRESH_TOKEN>"
      }
    }
  }
}

Why is it safer to run MCP Servers with Docker?