Health data aggregation server that provides MCP tools for querying health metrics, workouts, sleep data, strength training analytics, and correlations across multiple health data sources
FreeReps has well-structured tool definitions with consistent naming, comprehensive descriptions, and formal input schemas. All 20 tools follow verb_noun naming convention (get_*, list_*), making intent clear. Descriptions average ~150-200 characters, hitting the production baseline of 194 chars. All tools are READ_ONLY and properly documented. However, output schemas are not visible in the provided source code, only input schemas appear in tools.go. This is a critical gap: without documented output structures, LLMs cannot reliably extract response fields for downstream tool chaining. Additionally, no error handling guidance is present (no recovery suggestions, no error categorization), and there are no tool annotations (readOnlyHint, destructiveHint, idempotentHint) that would help modern MCP clients optimize execution. The health metrics and strength analysis tools show domain expertise, but the lack of visible output documentation and error recovery patterns prevents this from reaching 80+.
Compare a metric's statistics between two time periods (e.g. this week vs last week).
Query daily activity summaries by date range. Returns date, active energy, exercise time, stand hours, and their goals.
Query audiograms by date range. Returns id, sensitivity points, start date, and source.
Query category-specific samples (blood pressure, body measurements, nutrition, etc.) by date range. Returns id, category, value, units, and source.
Compute Pearson correlation between two health metrics. Returns time-aligned data points and the correlation coefficient.
Query ECG recordings by date range. Returns id, classification, average heart rate, start date, and source.
Output schemas not documented in source code. LLMs cannot extract response fields, plan multi-step agent workflows, or validate field presence. Without documented output, tools force downstream discovery calls and risk mid-chain failures.
No error handling guidance provided. Tools describe happy-path behavior but do not document failure modes, recovery suggestions, or error categorization (retryable vs user-fixable vs fatal). LLMs will have no guidance when calls fail.
No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY, which should be declared via annotation so MCP clients can optimize request batching and retry strategies without manual inspection.
list_available_metrics has no parameters defined (empty input schema). While this is intentional for a discovery tool, the input schema should explicitly declare '{}' (empty object) to signal that the tool takes no arguments.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 70 | 2026-07-28+ | v2 |
Retrieve time-bucketed health metrics. Returns aggregated data points (avg/min/max/count) per time bucket.
Query medication records by date range. Returns id, name, dosage, log status, start date, and source.
Get aggregate statistics (avg, min, max, stddev, count) for a metric over a time range.
Retrieve sleep sessions and individual sleep stages. Sessions include total sleep, stage durations (core/deep/REM), and timing. Stages are individual segments with start/end times.
Aggregated sleep stats per period: duration, stage percentages, efficiency, bedtime/waketime consistency.
Query state of mind records by date range. Returns id, mood, and source.
FreeReps database: estimated one-rep max per exercise per session, using Epley over repetitions plus reps in reserve. Sets without an effort rating are excluded. The estimate loses accuracy above roughly ten effective repetitions.
FreeReps database: effort distribution in reps-in-reserve bands, failure rate, per-exercise stats, and optional per-session progression. Covers sets logged as RIR and as RPE alike.
FreeReps database: monthly/weekly aggregated workout and strength volume across all logging sources. Returns workout counts, duration, calories by type, plus strength set/rep/tonnage totals per period. In the strength block, 'sessions' counts distinct session start times and is the denominator of 'avg_sets_per_session'; 'training_days' counts calendar days on which anything was logged. The two differ only on a day holding more than one session.
FreeReps database: sets per muscle group per period, as primary-target sets and as sets weighted with assisting muscles at 0.5. Also reports training frequency per muscle, and how much of each figure rests on approximate exercise mapping or on exercises with no muscle data at all.
Query vision prescriptions by date range. Returns id, eye, sphere, cylinder, axis, and source.
FreeReps database: individual strength training sets. Returns exercise, muscle group, weight, reps, and the effort rating on the scale its source recorded — RIR for Alpha Progression, RPE for Hevy.
Query workouts with optional type filter. Returns workout summaries including duration, energy, distance, and heart rate data.
List all available health metrics with their categories and enabled status.
Some parameter descriptions could be more prescriptive about constraints. E.g., 'start' and 'end' accept 'ISO 8601 or YYYY-MM-DD' but do not clarify ambiguous edge cases (e.g., does '2024-01-15' imply start of day or end of day in the server's timezone?).