Trainbud
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | Yes | Garmin Connect email | |
| TRAINBUD_HOST | No | Bind host for HTTP server | 127.0.0.1 |
| TRAINBUD_PORT | No | Bind port for HTTP server | 3847 |
| CACHE_TTL_SLEEP | No | Sleep cache TTL (seconds) | 7200 |
| CACHE_TTL_STATS | No | Stats cache TTL (seconds) | 3600 |
| GARMIN_PASSWORD | Yes | Garmin Connect password | |
| TRAINBUD_API_KEY | No | Bearer token for HTTP MCP (`trainbud serve`) | auto-generated |
| TRAINBUD_LOG_PATH | No | Log file path | .trainbud/mcp.log |
| TRAINBUD_CACHE_PATH | No | SQLite cache database | .trainbud/cache.db |
| CACHE_TTL_ACTIVITIES | No | Activity cache TTL (seconds) | 1800 |
| TRAINBUD_SESSION_PATH | No | Session token storage | .trainbud/session.json |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_latest_activityA | Returns the most recent Garmin activity with distance, duration, pace, and heart rate stats. |
| get_activities_rangeA | Returns Garmin activities within an ISO 8601 date range. |
| get_sleep_dataB | Returns sleep duration, quality score, stage breakdown, and interruptions for recent nights. |
| get_heart_rate_trendsB | Returns resting, max, and average heart rate trends over a time period. |
| get_recovery_statusB | Combines HRV, sleep, stress, and resting heart rate into a recovery score and training recommendation. |
| get_body_compositionC | Returns weight, body fat, and muscle mass trends over a time period. |
| get_stress_levelsC | Returns daily stress averages and trends from Garmin Connect. |
| get_vo2_max_trendsA | Returns VO2 max fitness trends over time from Garmin Connect. |
| get_training_insightsC | Returns a combined weekly training summary: latest activity, recent workouts, sleep, recovery, and stress. |
| get_findingsA | Returns what stands out in the user's stored history against their own 28-day baselines: resting heart rate elevation, sleep debt, HRV trend breaks, and training load ratio. Prefer this over reading raw metrics when asked how things are going. |
| get_week_reviewA | Returns this training week against the previous one — sessions, training load, sleep, resting heart rate, HRV and stress — plus where the acute:chronic load ratio lands if next week repeats this one, a sleep debt and consistency read against the user's own baseline, and the next race on record. Prefer this over reading individual metrics when asked how the week or the block is going, whether to back off, or what to do next week. |
| compare_workoutsB | Compares one workout against the user's own earlier workouts of the same type and a similar distance (or duration, for sports that record no distance). Reports duration, pace, heart rate, elevation and calories against the closest previous effort, with the typical value across the comparable set. Defaults to the most recent activity. Use this when asked how a session went compared with usual, rather than reading a single activity summary. |
| remember_contextA | Records something about the user that Garmin does not know: a goal, a race and its date, an injury, or a free-form note. Use this whenever the user mentions one in passing. It can also silence a finding the user has already accounted for — see |
| get_user_contextA | Returns the goals, races, injuries and notes on record for the user. Read this before giving training advice. |
| log_subjectiveA | Records how a day or session actually felt, rated 1-10: perceived effort (rpe), soreness, or mood. Garmin has no equivalent. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Most tools are clearly distinct, but some overlap exists between get_findings, get_recovery_status, get_training_insights, and get_week_review, which all return aggregated health/training metrics. Descriptions help clarify their specific focuses (anomalies vs. recovery score vs. weekly summary vs. week-over-week comparison), and get_latest_activity vs get_activities_range are distinct by scope. Overall, an agent can likely select the right tool with careful reading.
All tool names follow a consistent verb_noun pattern in snake_case: most start with 'get_' for retrieval, with a few action verbs (remember_context, compare_workouts, log_subjective) that are equally clear. No mixed conventions or vague names—every name is self-explanatory.
15 tools is at the upper end of the ideal range but well-scoped for a training assistant that combines user context, Garmin metrics, and comparative analysis. Each tool covers a distinct need, from retrieving raw data to high-level insights, without redundancy or bloat.
The surface covers the core lifecycle: user context (remember/get), subjective logging, comparisons, and a wide array of metric getters (sleep, HR, recovery, body comp, stress, VO2, activities). Minor gaps exist—no direct update/delete for context, and some overlapping insights—but these are not critical for the server's purpose and agents can work around them.