Install
$ agentstack add mcp-henrikbrehm-triathlon-coach-skill ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
triathlon-coach
A Claude Code Agent Skill that turns raw data from your connected fitness MCP servers into a structured triathlon training analysis and a concrete next-session recommendation.
What it does
When you ask Claude about your training ("How is my form?", "What should I train today?"), the skill pulls your recent activities and wellness data from every connected fitness MCP server, normalizes it into a canonical schema, and produces a coach-style report with these sections:
- Snapshot — fitness (CTL), fatigue (ATL), form (TSB), recovery status in one sentence
- Discipline breakdown — swim/bike/run volume, intensity, trend, balance check
- Load & recovery trends — CTL/ATL/TSB, ACWR, HRV/RHR/sleep trends
- Flags — overtraining, illness, injury, monotony, and load-spike signals
- Next session — discipline, type, duration, target zone, with a data-based rationale
- Block recommendation — where you are in the training cycle and what to adjust
- Data coverage & gaps — which sources and time window were used, what was missing
All numeric metrics are computed deterministically by a bundled Python script (scripts/compute_metrics.py) — the model never estimates training-load math in its head. Same input, same output, every time.
How it works
discover fitness MCP servers
|
v
pull activities + wellness (last 42-90 days, all sources)
|
v
normalize into canonical JSON schema
|
v
deduplicate cross-source double counts
|
v
scripts/compute_metrics.py (deterministic: PMC, ACWR, monotony, intensity, recovery)
|
v
coach report + next-session recommendation (in your language)
The skill ships with reference files (zones, training load, recovery, periodization, data-source mapping, glossary) that Claude loads on demand to interpret the script output.
Supported data sources
The skill is source-agnostic. It discovers connected MCP servers by name pattern and works with any server that exposes activities and/or wellness data, including servers for:
Garmin Connect, Strava, Coros, Polar, Suunto, Wahoo, Whoop, Oura, intervals.icu, TrainingPeaks, Fitbit
If a source lacks a metric (e.g. no power data, no HRV), the skill degrades gracefully: it falls back to the next available load-estimation method (power → pace → heart rate → session RPE) and reports every gap explicitly instead of guessing.
Requirements
- Claude Code, or claude.ai with custom skills enabled
- Python 3.9+ on PATH (the metrics script uses the standard library only — no pip installs)
- At least one fitness MCP server connected and authenticated
Installation
Claude Code
Copy the skill directory into your skills folder:
# personal scope (all projects)
cp -r skills/triathlon-coach ~/.claude/skills/
# or project scope (this project only)
cp -r skills/triathlon-coach .claude/skills/
claude.ai
Zip the skills/triathlon-coach/ directory and upload it as a custom skill in your claude.ai settings (Capabilities → Skills).
Usage
Ask in English or German — the report is rendered in the language you use:
- "How is my form? Am I ready to add intensity this week?"
- "Weekly training report, please."
- "What should I train today?"
- "Wie ist mein Formstand?"
- "Was soll ich heute trainieren?"
- "Mach mir eine Trainingsanalyse der letzten sechs Wochen."
What gets computed
All of the following come from compute_metrics.py — script-computed, never estimated by the model:
| Metric group | Contents | |---|---| | PMC | CTL (fitness), ATL (fatigue), TSB (form), daily series + ramp rate | | ACWR | Acute:chronic workload ratio, rolling (7d/28d) and EWMA variants | | Monotony & strain | Foster weekly monotony and strain | | Intensity distribution | 80/20 low/moderate/high split from time-in-zone or session averages | | Training load | Per-activity TSS via power, pace, heart rate, TRIMP, or session-RPE fallbacks | | Recovery | HRV, resting HR, and sleep 7-day trends vs 28-day baselines | | Flags | ACWR spikes, high monotony, fast CTL ramp, very low TSB, suppressed HRV, combined recovery alerts |
Repository layout
README.md
LICENSE
skills/triathlon-coach/
├── SKILL.md # skill entry point (workflow, report template, guardrails)
├── references/
│ ├── zones-and-thresholds.md # FTP/LTHR/CSS/pace zone systems
│ ├── training-load-and-pmc.md # TSS variants, CTL/ATL/TSB, ACWR, monotony
│ ├── recovery-and-readiness.md # HRV, RHR, sleep, recovery scores
│ ├── periodization-and-planning.md # blocks, tapering, session selection
│ ├── data-sources-and-normalization.md # per-source field mapping, dedup rules
│ └── glossary.md # one-paragraph metric definitions
└── scripts/
├── compute_metrics.py # deterministic metrics engine (stdlib only)
└── example_input.json # synthetic fixture for testing
Disclaimer
This skill is decision support, not medical advice, and not a substitute for a physician or a certified coach. Your subjective feel and RPE always override the numbers — if the data says "go hard" and your body says otherwise, listen to your body. The skill never recommends training through pain, injury, or illness.
The skill adds no third-party services: it only reads from MCP servers you have connected yourself, and the bundled metrics script runs locally on your machine. Data pulled from your fitness accounts is processed in your Claude conversation like any other conversation content.
License
MIT — see [LICENSE](LICENSE).
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: HenrikBrehm
- Source: HenrikBrehm/triathlon-coach-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.