HealthLedger MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HEALTH_MCP_DB | No | SQLite database path. | ~/.healthledger/health.db |
| HEALTH_MCP_HOST | No | Bind host (only when HEALTH_MCP_TRANSPORT=http). | 127.0.0.1 |
| HEALTH_MCP_PATH | No | Path for MCP endpoint (only when HEALTH_MCP_TRANSPORT=http). | /mcp |
| HEALTH_MCP_PORT | No | Bind port (only when HEALTH_MCP_TRANSPORT=http). | 8800 |
| HEALTH_MCP_MAX_ROWS | No | Max rows returned by a list query. | 1000 |
| HEALTH_MCP_AUDIT_LOG | No | Audit log path. | ~/.healthledger/audit.log |
| HEALTH_MCP_TRANSPORT | No | Transport mode: stdio (local) or http (remote, opt-in). | stdio |
| HEALTH_MCP_PUBLIC_URL | No | Public URL of the server (only when HEALTH_MCP_TRANSPORT=http). | |
| HEALTH_MCP_DEFAULT_USER | No | Default user label when none is passed. | me |
| HEALTH_MCP_ALLOWED_LOGINS | No | Comma-separated list of allowed GitHub logins (required only when HEALTH_MCP_TRANSPORT=http). | |
| HEALTH_MCP_MAX_TEXT_CHARS | No | Max chars per free-text field. | 20000 |
| HEALTH_MCP_MAX_EXPORT_ROWS | No | Max rows per export page. | 500 |
| HEALTH_MCP_GITHUB_CLIENT_ID | No | GitHub OAuth client ID (required only when HEALTH_MCP_TRANSPORT=http). | |
| HEALTH_MCP_RATE_LIMIT_CALLS | No | Calls allowed per window. | 240 |
| HEALTH_MCP_MAX_BULK_JSON_CHARS | No | Max JSON payload size for bulk import. | 200000 |
| HEALTH_MCP_GITHUB_CLIENT_SECRET | No | GitHub OAuth client secret (required only when HEALTH_MCP_TRANSPORT=http). | |
| HEALTH_MCP_MAX_WEARABLE_IMPORT_ROWS | No | Max wearable samples per import call. | 500 |
| HEALTH_MCP_RATE_LIMIT_WINDOW_SECONDS | No | Rate-limit window length. | 60 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| log_metricA | Record one quantitative reading (a point in a time series). |
| log_eventA | Record a discrete event: a symptom, a medication dose, a meal, or an activity. |
| log_noteC | Record a free-form health journal entry. |
| set_profileB | Set (upsert) a durable profile fact for a user. |
| get_profileA | Return all durable profile facts for a user as a key/value map. |
| delete_profileA | Delete one durable profile fact by key. Use for corrections/removals. |
| get_metricsA | Return raw metric readings, newest first, optionally filtered by metric/date. |
| get_eventsA | Return recorded events (symptoms/medications/meals/activities), newest first. |
| get_notesA | Return journal notes, newest first, optionally filtered by date or tag substring. |
| list_metricsB | List which metrics have data for a user, with counts and the latest value of each. |
| analyze_metricA | Compute analysis-ready statistics and a trend for one metric over a window. Returns count, first/last/latest, min/max, mean, median, standard deviation, and a least-squares linear trend (slope per day, projected next value, direction). These are descriptive statistics for interpretation — not a diagnosis. |
| add_conditionC | Store a structured problem-list condition. Descriptive record only. |
| list_conditionsB | List stored conditions, optionally filtered by status. |
| add_allergyC | Store a structured allergy or intolerance record. |
| list_allergiesA | List stored allergies/intolerances, optionally filtered by status. |
| add_medicationC | Store a structured medication with schedule/refill metadata. |
| list_medicationsB | List medications, defaulting to active/current medications. |
| log_medication_takenC | Log an adherence event: taken, missed, skipped, delayed, or other status. |
| list_medication_scheduleB | Return active medication schedules and refill dates. |
| list_medication_logsA | List medication adherence/dose logs, optionally filtered by medication/date. |
| add_encounterC | Store a visit/encounter such as annual physical, specialist visit, ER visit, therapy, dental, or vision. |
| list_encountersC | List visits/encounters, optionally filtered by type. |
| add_procedureB | Store a procedure/surgery/test record and any follow-up date. |
| list_proceduresC | List procedures, surgeries, and tests with outcomes/follow-up dates. |
| add_imaging_reportC | Store imaging/radiology report metadata and text findings. |
| list_imaging_reportsA | List imaging/radiology reports, optionally filtered by modality/date. |
| add_immunizationC | Store an immunization/vaccine record and optional next due date. |
| list_immunizationsA | List immunizations, optionally limited to vaccines due within N days. |
| add_care_taskB | Store an actionable health task: appointment, refill, lab, screening, follow-up, upload, call, etc. |
| complete_care_taskC | Mark a care task completed. |
| list_care_tasksB | List care tasks, optionally filtered by status or task type. |
| list_due_tasksA | List open care tasks due within N days, optionally including overdue tasks. |
| add_genomic_recordC | Store one structured genomic/PGx record as lab-reported data. |
| list_genomic_recordsA | List genomic/PGx records, optionally filtered by type or gene. |
| get_reasoning_guideA | Return HealthLedger's packaged guidance on interpreting this schema: order of operations, when to defer to a clinician, and how to phrase uncertainty. Call this once per session before doing cross-signal reasoning. |
| add_lab_reportB | Store metadata for a lab/bloodwork report. Add individual results separately. |
| list_lab_reportsB | List lab/bloodwork report containers, newest first. |
| add_lab_resultC | Store one lab/bloodwork result. Numeric values can later be trended. |
| list_lab_resultsB | List lab results, optionally filtered by analyte and date range. |
| analyze_lab_trendB | Return descriptive trend stats for numeric lab results for one analyte. |
| add_biomarkerC | Store a biomarker observation, including oncology/genetic/inflammatory markers. |
| list_biomarkersB | List biomarker observations, optionally filtered by marker/category/date. |
| analyze_biomarker_trendB | Return descriptive trend stats for numeric biomarker observations. |
| add_tumor_recordC | Store tumor/cancer-related structured information as user-provided data. |
| list_tumor_recordsB | List tumor/cancer-related records. Descriptive storage only. |
| add_documentB | Store document/report metadata and extracted text. Binary files are not stored here. |
| list_documentsB | List stored health documents/reports and extracted text metadata. |
| add_family_historyC | Store family history facts by relation. |
| list_family_historyB | List family history records, optionally filtered by relation. |
| add_health_recordB | Store any health datum that does not fit a dedicated table yet. |
| list_health_recordsA | List generic/catch-all health records, optionally filtered by type/date. |
| add_reproductive_recordC | Store menstrual cycle, pregnancy, contraception, fertility sign, or related reproductive record. |
| list_reproductive_recordsC | List reproductive health records, optionally filtered by type/date. |
| analyze_reproductive_trendA | Return descriptive cycle length/duration stats from stored cycle records only. |
| add_substance_use_logC | Store time-varying substance exposure such as alcohol, nicotine, caffeine, cannabis, or other. |
| list_substance_use_logsB | List substance-use logs, optionally filtered by substance/date. |
| analyze_substance_trendB | Return descriptive daily-total stats for one substance when numeric amounts exist. |
| add_wearable_sourceC | Store a wearable/app/data-source identity such as Apple Health, Garmin, Oura, Fitbit, CGM, or scale. |
| list_wearable_sourcesC | List wearable/app data sources. |
| add_wearable_sampleA | Store one wearable sample. Use import_wearable_samples for batches. |
| import_wearable_samplesB | Bulk import wearable samples from a JSON array of objects. Capped per call. |
| list_wearable_samplesB | List wearable samples, optionally filtered by type/source/date. |
| analyze_wearable_trendC | Return descriptive stats/trend for one wearable sample type. |
| correlate_metricsA | Correlate two health signals aligned onto a common time grid. Resamples each signal to one value per |
| analyze_event_impactA | Estimate a signal's before/after change around a discrete event. Splits one signal at an anchor date (e.g. a medication start, procedure, or regimen change) into 'before' and 'after' groups, reports descriptive stats for each, and adds the difference in means plus a Welch t-test. |
| align_seriesA | Resample 2+ signals onto one shared time grid for side-by-side comparison. Takes a JSON array of signal specs and returns a single aligned table — one row per time bucket, one column per signal — so signals can be compared without hand-matching timestamps. |
| normalize_seriesA | Reconcile mixed units and reference ranges within one signal. Pulls a signal's readings, converts every value (and its reference range, for labs/biomarkers) to a single common unit, and adds a unitless 'reference position' so readings taken with different units or reference ranges become directly comparable. |
| analyze_trendA | Trend intelligence for one signal — beyond a single straight line. Pulls a signal's dated numeric readings and returns, in one call:
|
| summarize_healthA | Produce a compact, analysis-ready digest of a user's whole record over a window: profile, per-metric statistics + trend, recent events grouped by category, and recent notes. This is the primary tool for an LLM to reason over someone's health; it returns computed descriptive data only, never a diagnosis. |
| health_agendaA | Return a deterministic agenda: due tasks, refills, follow-ups, immunizations, and medication schedule. |
| care_gap_reportA | Report missing/stale data and unresolved stored follow-ups. This is organizational, not clinical guidance. |
| build_clinician_packetA | Build a source-cited, descriptive visit-prep packet for a clinician or specialist. The packet is deterministic and local: current medications/conditions/allergies, recent changed numeric signals with uncertainty, relevant stored records, follow-up/completeness items, lab-reported genomic/PGx records, and a Markdown rendering. It does not diagnose, rank clinical urgency, or suggest treatment. |
| search_recordsA | Full-text-ish search across stored health domains (case-insensitive substring). |
| delete_recordB | Delete one record by id (for corrections). DESTRUCTIVE. |
| export_dataA | Export a bounded page of a user's record as structured JSON. |
| health_statusA | Return non-secret operational status and per-user record counts. |
| semantic_searchA | Relevance-ranked full-text search across all free-text health history. Unlike search_records (exact case-insensitive substring), this builds a transient SQLite FTS5 index over every free-text field — notes, event details, encounter reasons/assessments/plans, lab flags, imaging findings, document text, care-task notes, and more — stems terms, and ranks hits by BM25. So the model can query history by meaning/keywords instead of an exact key and gets the best matches first. This is lexical ranking (local, no embeddings or network), not vector semantics. Every hit carries source_table + record_id (feed them to get_record to pull the exact row) and a highlighted snippet, so findings can be grounded in a row. |
| get_recordA | Fetch one exact stored row by table + id — the citation primitive. Search and analysis tools return source_table / source_ids; this resolves one of those to the full row, so a statement can be grounded in the actual data. |
| data_coverageA | Expose what data actually exists — and what's absent or stale — as data. Purpose: let the model check the record before asserting, instead of confabulating around missing values. Two modes:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| reasoning_resource |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Cole-Will-I-Am/HealthLedger-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server