YOUB
YOUB MCP Server - Manage your endurance training data and race preparation Connect it once from Claude, ChatGPT or Claude Code and ask about yesterday's…
Что умеет
- List Activities: List the recorded sport activities (rides, runs, swims, ...) of the authenticated athlete, newest first, with summary metrics per activity (sport, date, duration, distance, load). Sup
- Get Activity: Get one activity of the authenticated athlete with its full analysis: power/heart-rate/running metrics, zone distribution, detected intervals, elevation, classification, the linked plann
- List Planned Sessions: List the planned training sessions of the authenticated athlete in a date range (max 92 days), sorted by date. Each entry has the session title, sport, `sessionDate` (the athlet
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
YOUB MCP Server - Manage your endurance training data and race preparation
Connect it once from Claude, ChatGPT or Claude Code and ask about yesterday's intervals, where your form stands eight weeks out from a race, or what your HRV has done this month. With write access granted, the assistant doesn't just talk about training — it plans it: create_session builds a full workout structure with intervals, repeats and targets by heart rate, power or pace, resolved against your actual training zones, and your existing device connection puts it on the watch for the day.
- Read and reason about your Health data coming in from Whoop, Apple, Fitbit and more
- Read and reason about your activities coming from Strava, Garmin and more
- Create and Sync Workouts directly to your Watch
- Use the YOUB race catalog to create training plans exactly matching your races profile, climate and topology
- Benefit from YOUB fitness metrics calculation such as FTP derivation, Threshold pace, Fitness & Fatigue measurements
Connecting is as simple as scanning a QR code with your phone and existing YOUB account.
Requires: a YOUB account and the app (that's where you connect Garmin, Strava, WHOOP, Oura, Polar, Suunto or Wahoo).
Free
You bring the model, YOUB brings the data.
Список инструментов сервера (20)
Технические названия из tools/list. Нужны только разработчикам.
| list_activities | List the recorded sport activities (rides, runs, swims, ...) of the authenticated athlete, newest first, with summary metrics per activity (sport, date, duration, distance, load). Supports pagination and an optional date filter. Use get_activity for the full analysis of a single activity. |
| get_activity | Get one activity of the authenticated athlete with its full analysis: power/heart-rate/running metrics, zone distribution, detected intervals, elevation, classification, the linked planned session (if any), and the share caption. Activity IDs come from list_activities. |
| list_planned_sessions | List the planned training sessions of the authenticated athlete in a date range (max 92 days), sorted by date. Each entry has the session title, sport, `sessionDate` (the athlete’s local calendar day — use it, never re-derive a day from `sessionTime`), planned duration/load, workout structure with zone targets, and completion status; races the athlete has as goals in the range appear as entries of kind "race". The response is paginated at 100 entries per page: read `pagination.totalPages` and call again with the next `page` when it is greater than 1, otherwise the tail of the range is silently missing. |
| get_session | Get one planned training session of the authenticated athlete by id: title, sport, `sessionDate`/`sessionLocalTime` (the athlete’s local day and clock time — use them, never re-derive a day from the UTC `sessionTime`), duration, description, the full workout structure — enduranceWorkoutStructure with targets resolved against the athlete’s zones, or strengthWorkoutStructure with the catalogue exercise details — plus a `shorthand`, planned load, plan membership, completion status and `sync` (where the session is pushed to). Read this before update_session — a structure update replaces the whole structure. Notes on the payload: zone targets are resolved into absolute values (watts, sec/km) for CYCLING and RUNNING only — other sports return the zone as authored; `enduranceWorkoutStructure` is null both when the session has none and when the stored structure fails to parse; `estimatedDistanceMeters` appears only when the session has no planned distance AND every part of the structure could be priced from the athlete’s pace/CSS anchors — its absence means "no estimate", not "no distance"; `loadScorePlanned` and `intensityRatioPlanned` are computed for RUNNING/CYCLING endurance structures and for strength prescriptions (from sets, work seconds and RPE/%1RM); they are null by design for structure-less sessions and for other sports — null means "not priceable", never zero load. |
| search_exercises | Find strength exercises by name (any language, German is fine) — in the YOUB catalogue and among the athlete’s own custom exercises — to get the `exerciseSlug` a strengthWorkoutStructure needs. Each hit carries the slug, title, measurementType (decides which prescription fields are required), equipment and primary muscle group; the `hint` spells out the field rules for the returned types. Call this for every exercise before create_session / update_session with a strengthWorkoutStructure — slugs are never guessed. |
| create_session | Create a planned training session for the authenticated athlete on a calendar day. The session appears in the athlete’s YOUB calendar immediately. It reaches the connected watch (Garmin, Wahoo, Suunto) only once it is within the 3-day export window — sessions further out are pushed by the nightly export on the day they enter it, and swimming is never pushed to any watch. Do not promise the athlete a watch push: read `sync` on the returned session, which names the destination, the state and, for a session still outside the window, the date it syncs from. Give an enduranceWorkoutStructure for running, cycling and swimming sessions and a strengthWorkoutStructure (exercises resolved via search_exercises) for strength sessions — never both; strength and other sessions may also carry just a duration and description. Returns the created session as stored, with the structure of either kind, a `shorthand`, `sessionDate`/`sessionLocalTime` and `estimatedDistanceMeters` (present only for a structure that could be fully priced from the athlete’s anchors; absent means no estimate, not no distance). |
| update_session | Change a planned session of the authenticated athlete: reschedule (sessionDate / sessionTime), retitle, rewrite the description, change the sport, or replace the workout structure. Only the fields given are changed. An enduranceWorkoutStructure or strengthWorkoutStructure REPLACES the stored structure completely and clears the other kind (read it with get_session first and send it back in full); when you replace the structure, also send a title and description that match the new content. A structure write HARD-FAILS on a session that has no structure yet — delete it and create a structured session instead. For structured sessions the duration follows from the parts — send durationMinutes only as a deliberate rounded display estimate, and expect a warning back if it stops summarising the structure. Changes reach the watch under the same export window as create_session; read `sync` on the returned session rather than promising a push. Returns the session as stored. |
| delete_session | PERMANENTLY delete one planned session of the authenticated athlete. The row is removed — this is not a soft delete and there is no undo. The session disappears from the calendar and the watch. Deleting several sessions means several calls — confirm with the athlete before clearing a whole week. |
| list_race_goals | List the race goals of the authenticated athlete: event name and date, distance, priority (A/B/C), target and actual finish times, notes, the coach race strategy, the linked catalog race (course profile, location, homepage), and linked training sessions. |
| search_races | Search the YOUB race catalogue (running, cycling, triathlon and obstacle events with their individual races) to find a race the athlete wants to target. Each event lists its races with id, name, day, distance and elevation gain (relay races also their legs) — pass a race id to create_race_goal as race {kind:"ref", raceId}, or to get_race for the full record (course profile, descriptions). Filter by free text (event name, city), date window and sport. |
| get_race | Get one catalogue race by id with everything the catalogue knows: the event (name, day, location, homepage), the race’s distance, elevation gain, course profile, intro/description/pacing/training texts (de/en) and relay legs. Use after search_races when the athlete wants to know more about a race before targeting it. |
| create_race_goal | Create a race goal for the authenticated athlete. Prefer a catalogue race (search_races → race {kind:"ref", raceId}); use kind "custom" only when the race is not in the catalogue. One goal per catalogue race. Returns the goal as stored. |
| update_race_goal | Change a race goal of the authenticated athlete: retarget it to another race, change priority, notes or the target time (via race.goalTimeSeconds together with the race), or record the realized finish time. Only the fields given are changed. Returns the goal as stored. |
| delete_race_goal | Delete one race goal of the authenticated athlete. Linked training sessions stay; only the goal is removed. |
| get_wellness_summary | Get the authenticated athlete's current wellness snapshot from their connected wearable (Garmin, Whoop, Suunto, or Oura): last-night sleep, HRV, resting heart rate, readiness/recovery, and stress, with recent trends where available. |
| get_wellness_series | Get a day-by-day time series of one wellness metric of the authenticated athlete from their connected wearable: resting-hr (bpm), hrv (ms), sleep, readiness (score), stress (score), or strain (Whoop day load on their 0-21 scale — Whoop athletes only, and neutral: high is good or bad only against what they meant to do). For sleep, each point's `value` is the time asleep that night in SECONDS, and a separate `score` field carries the 0-100 sleep score (null when the wearable synced no score for that night). Optional from/to window (defaults to the last 90 days, max 365 days). |
| get_athletic_profile | Get the authenticated athlete's anchor metrics, training zones and detection provenance in one call — the ruler every zone target in `get_session` / `create_session` and every time-in-zone figure in `get_activity` is resolved against. Read this BEFORE prescribing zone-based work or interpreting a session, and never invent an FTP, threshold or max HR that is not in here. Returns `metrics` (per anchor: the `effective` value in force, the `manual` value the athlete stored, the `source` the effective value came from and its `unit`), `zones` (each group `computed` from the anchors, `custom` when the athlete armed their own, or `unavailable`), `detections` (what the auto-detection pipeline last found for FTP, running threshold pace and per-sport LTHR, and whether it is authoritative) and `notes` — plain-language caveats about this profile, e.g. an age-estimated max HR or a detection past its 90-day shelf life. An athlete with no profile yet is a success with null values and a note, not an error. |
| get_metric_history | The change timeline of one of the athlete's derivable threshold metrics — manual edits and auto-detections on a single axis, newest first. Use it to see whether a threshold is trending, stable, or was last touched months ago; each detection entry carries its confidence, estimator method and the effort it came from. An entry with a null `value` records the metric being CLEARED and handed back to auto-detection — `previousValue` names what was cleared. Read-only. |
| update_athletic_profile | Set the athlete's manual anchor values and custom training zones. Send ONLY the fields the athlete actually asked to change: every field you send is stored as their own value and from then on wins over whatever the auto-detection pipeline finds. A nullable field set to `null` clears the manual value and hands the metric back to detection (or, for VO2max and weight, back to the wearable). Numbers quoted from elsewhere — another app, a lab report, your own estimate — are not a change request: state the number, get the athlete's explicit go-ahead, and only then write it. Replacing a value the athlete set by hand is allowed but is reported back in `warnings`. Every write to a metric with a timeline is recorded on the metric history as MCP-sourced — clears included, as an entry with a null value — so it is never mistaken for something the athlete typed into the app and the timeline never contradicts the profile. Values that cannot be true together, such as a resting heart rate at or above the max, are refused rather than stored. Answers with the profile read back. |
| list_calendar_events | List the appointments in the calendars the athlete connected in the YOUB app (work meetings, travel, family commitments) for a date range of at most 92 days. Use it BEFORE planning or moving sessions: a session written on top of a commitment is reported as a conflict only after the fact, and a trip on a rest day is invisible without this. Each event carries local dates and weekdays, times for a timed event (an all-day event has none), the calendar `source`, and `busy` — whether it actually occupies the athlete, from the provider's own free/busy marker (Apple availability, Google transparency). Google's built-in week-number, holiday and contact-birthday calendars are labels rather than commitments and are always reported free. Anything with no marker at all defaults to busy. `endDate` is INCLUSIVE and means the same thing for every event: the last day the event covers. A one-day commitment therefore has `endDate` equal to `startDate` — it never blocks the following day. The response also has a `scope` block naming the connected calendars and their sync state, so "no events" and "no calendar connected" are distinguishable in one call. Read-only: YOUB never writes into the athlete's own calendars. |