Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HEALTH_MCP_DBNoSQLite database path.~/.healthledger/health.db
HEALTH_MCP_HOSTNoBind host (only when HEALTH_MCP_TRANSPORT=http).127.0.0.1
HEALTH_MCP_PATHNoPath for MCP endpoint (only when HEALTH_MCP_TRANSPORT=http)./mcp
HEALTH_MCP_PORTNoBind port (only when HEALTH_MCP_TRANSPORT=http).8800
HEALTH_MCP_MAX_ROWSNoMax rows returned by a list query.1000
HEALTH_MCP_AUDIT_LOGNoAudit log path.~/.healthledger/audit.log
HEALTH_MCP_TRANSPORTNoTransport mode: stdio (local) or http (remote, opt-in).stdio
HEALTH_MCP_PUBLIC_URLNoPublic URL of the server (only when HEALTH_MCP_TRANSPORT=http).
HEALTH_MCP_DEFAULT_USERNoDefault user label when none is passed.me
HEALTH_MCP_ALLOWED_LOGINSNoComma-separated list of allowed GitHub logins (required only when HEALTH_MCP_TRANSPORT=http).
HEALTH_MCP_MAX_TEXT_CHARSNoMax chars per free-text field.20000
HEALTH_MCP_MAX_EXPORT_ROWSNoMax rows per export page.500
HEALTH_MCP_GITHUB_CLIENT_IDNoGitHub OAuth client ID (required only when HEALTH_MCP_TRANSPORT=http).
HEALTH_MCP_RATE_LIMIT_CALLSNoCalls allowed per window.240
HEALTH_MCP_MAX_BULK_JSON_CHARSNoMax JSON payload size for bulk import.200000
HEALTH_MCP_GITHUB_CLIENT_SECRETNoGitHub OAuth client secret (required only when HEALTH_MCP_TRANSPORT=http).
HEALTH_MCP_MAX_WEARABLE_IMPORT_ROWSNoMax wearable samples per import call.500
HEALTH_MCP_RATE_LIMIT_WINDOW_SECONDSNoRate-limit window length.60

Capabilities

Features and capabilities supported by this server

CapabilityDetails
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

NameDescription
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 resample bucket (day/week/month) with agg, inner-joins the buckets they share, then computes Pearson and/or Spearman correlation with a two-sided p-value and the paired sample size. Either signal may come from any source: metric, wearable, lab, biomarker, substance.

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:

  • trend — least-squares slope with a standard error, 95% CI, p-value, and an honest 'distinguishable from flat / treat as noise' verdict;

  • baseline — the latest reading framed against your own recent median and typical range (Q1-Q3), the way a clinician reads a value;

  • rate_of_change — recent vs earlier slope, exposing acceleration;

  • outliers — points flagged by a robust median/MAD z-score, not silently averaged into the mean;

  • shape — whether a straight line is the right model at all (weak fit, residual runs, or a better-fitting quadratic) and whether linear extrapolation is advisable for bounded or cyclical signals;

  • change_point — the single most likely regime shift, if any.

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:

  • source + name given → coverage for that one signal: present?, count, first/last date, and days since the last reading.

  • otherwise → a whole-record inventory: per-domain counts with latest date and staleness, an explicit list of EMPTY domains, and a per-signal inventory (which metrics / analytes / biomarkers / wearable types / substances are tracked, each with count + last date + staleness).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
reasoning_resource

Latest Blog Posts

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