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 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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