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

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

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