Google Health Data Reference

Full inventory from sweeping all 39 Google Health data types via the Health MCP. Swept: 2026-08-26. Re-run anytime: python3 ~/.hermes/scripts/health-data-sweep.py Raw archive of each sweep: ~/.hermes/state/health-sweep-latest.json

Access paths

  • In-session MCP tools (preferred, interactive): mcp_google_health_google_health_list_data_points, _daily_rollup, _reconcile_data_points
  • Direct JSON-RPC (scripts): POST to http://127.0.0.1:3005/mcp — no auth locally. Handle SSE replies (parse data: lines); send Mcp-Session-Id header from the initialize response on subsequent calls. See ~/.hermes/scripts/health-data-sweep.py for a working client.
  • Direct REST (legacy): tokens at ~/.google-health-mcp/tokens.json — used by daily-health-sync.py. Works, but the MCP path avoids token-refresh handling.

LIVE — updating through today, safe to build automation on

Minute-level streams (Fitbit Air): heart-rate · heart-rate-variability · activity-level · active-energy-burned · time-in-heart-rate-zone · sedentary-period

Sessions: exercise (type + calories/distance summaries) · swim-lengths-data (⚠️ misfires during non-swim workouts — verify before trusting)

Nightly processed (ready ~30–60 min after wake): sleep (stages + summary) · respiratory-rate-sleep-summary · daily-resting-heart-rate · daily-oxygen-saturation · daily-heart-rate-variability · daily-respiratory-rate · daily-heart-rate-zones · daily-sleep-temperature-derivations · active-zone-minutes

Aggregate-only (raw listing returns EMPTY — must use daily_rollUp): steps · distance · total-calories

STALE — historical relics, DO NOT use for automation

weight (last Dec 2020) · body-fat (Nov 2020) · vo2-max (Aug 2025, pre-Air era) · run-vo2-max (Aug 2025) · daily-vo2-max (2019) · altitude (Dec 2025, foreign-tz trace) · food (catalog, Pret items — not logs) · hydration-log (one entry, 2017) · nutrition-log (Sep 2017) · height (static 1751mm, fine as reference only)

EMPTY / DEAD — no data, some reject API calls outright

No data: blood-glucose · core-body-temperature · electrocardiogram · irregular-rhythm-notification · oxygen-saturation (instant variant — the daily one is live)

Dead verbs: floors + calories-in-heart-rate-zone (reject BOTH list and rollup) · active-minutes (list EMPTY, rollup invalid-arg)

Quirks learned the hard way

  • sleep rejects server-side time filters (INVALID_DATA_POINT_FILTER_RESTRICTION_COMPARABLE) — fetch recent points, slice locally.
  • List results are newest-first; page_size small is cheap.
  • The data_type_coverage tool misreports — trust list_data_points directly.
  • Nightly types finalize late: sleep/RHR/temp read short if pulled immediately after wake. Wait ~60+ min or re-pull previous-day values later.
  • Rollup max window 90 days; window_size_days × page_size ≤ type cap.

Where health data lands

  • PWA dashboard: https://health.00000041.xyz (LAN http://192.168.0.182:8654; container health-app, stack /data/compose/30) — today card, trend charts, correlations, two-tap mood logger (CouchDB wellness DB → wellness-tracker.md mirror)
  • workspace/health/health-tracker.md + health-daily.csv ← daily-health-sync.py (cron 08:10) — the only script that talks to Google; everything downstream reads its CSV
  • workspace/health/recovery-status.md + recovery-daily.csv ← health-recovery.py (cron 08:30, reads CSV, GREEN/AMBER/RED flag)
  • illness-watchdog.py (cron 09:15, reads CSV) — silent unless skin temp ≥+0.5° / RHR ≥+5 over 7d-mean / SpO₂ <94% on 2 consecutive days
  • health-export.py (cron 08:35) → atomic health-app/data/health-data.json (accumulated history + moods from CouchDB); rebuilds the wellness tracker mirror
  • Sunday housekeeping “Health Week” section reads the same CSV
  • This file + ~/.hermes/state/health-sweep-latest.json ← health-data-sweep.py (manual/on-demand)

The HA google_health integration was removed 2026-08-26 when the pipeline consolidated onto the Health MCP — no HA sensor.joe_* dependency remains.

Baseline snapshot — 2026-08-26 morning

Resting HR 50 bpm · SpO₂ avg 97.3% (93.8–100) · resp rate 14.6 br/min · HRV avg 64.5 ms (non-REM HR 43) · skin temp nightly 35.03° vs 34.92° baseline (+0.11°) · sleep 7h58 (deep 76m / REM 88m / awake 13m) · steps trailing week: 20,004 / 19,536 / 10,164 / 7,879 highs