Talk to your own fitness data through Claude and other MCP clients
TrainBud has 15 well-named tools with consistent verb_noun patterns (get_*, remember_*, log_*). All tools have descriptions (avg 65 chars, within baseline). Input schemas are present and typed for all tools. However, parameter descriptions are sparse or missing context. Output schemas are undocumented, LLMs cannot predict response structure. Error handling exists (toolErrors.ts) but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Two write tools (remember_context, log_subjective) lack confirmation patterns. Overall: solid naming and basic structure, but incomplete parameter docs and missing output schemas limit LLM reasoning.
Compare workouts from Garmin Connect
Get activities within a date range from Garmin Connect
Get body composition data from Garmin Connect
Get detected findings and anomalies from fitness data
Get heart rate trend data from Garmin Connect
Get the most recent activity from Garmin Connect
Get recovery status metrics from Garmin Connect
Output schemas undocumented. LLMs cannot predict response structure for any of the 15 tools. Responses from Garmin API are likely verbose; no evidence of stripping irrelevant fields or capping result counts.
Parameter descriptions missing or minimal. 'days' and 'nights' parameters lack range constraints (e.g., 1 - 365). 'limit' in compare_workouts has no bounds. LLMs will pass arbitrary values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
Get sleep data from Garmin Connect
Get stress level data from Garmin Connect
Get training insights from Garmin Connect
Retrieve stored user context information
Get VO2 max trend data from Garmin Connect
Get a weekly review of fitness metrics
Log subjective ratings (RPE, soreness, mood)
Store user context information (goals, races, injuries, notes)
Write tools (remember_context, log_subjective) lack confirmation or dry-run patterns. Agents can accidentally store incorrect context or log wrong ratings without verification.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Clients cannot distinguish safe read-only tools from write tools at a glance.
Error handling in toolErrors.ts provides basic messages but lacks recovery guidance. 'An unexpected error occurred' gives LLM no actionable next step.