run.stas/stas
repo:https://github.com/hivrich/stas.run
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
- transport:
- remote
- credential class:
- gated
Owner verification
Not yet verified. Verifying proves you control this server and is free, permanently — it never changes a published score.
Start verification →Tools
- commit_goal_result_changeshallow
Commit one previewed goal, start, activity-link, or result change. Call only after the user explicitly confirms the exact preview from preview_goal_result_change. The server rejects stale data and returns the new authoritative editing state.
- commit_profile_section_changeshallow
Commit a previously previewed rules or profile memory change. Call this only after the user explicitly confirms the exact full text shown for that preview. If preview returned noChange=true, do not call commit. The server updates the profile only if the section hash still matches the preview.
- create_note_eventshallow
Create or update NOTE events in Intervals. dry_run is required: false writes the note, true previews only. Send category=NOTE and external_id=note:YYYY-MM-DD:<slug>. Use all-day local times for normal notes, keep description short, and omit type, moving_time, icu_training_load, and workout_doc. For weekly review notes or other notes that apply to the whole week, send for_week=true; omit it or use false for ordinary notes. Do not create a seven-day date range for weekly notes; keep one all-day anchor date and use for_week=true.
- create_plan_eventshallow
Create or update planned WORKOUT events in Intervals. For changes to an existing STAS workout, keep the same external_id and call this tool again; do not delete the day/window just to edit time, name, note, load, color, or workout_builder. This tool is self-contained; do not look for SKILL.md or examples in the athlete's calendar. dry_run is required: false writes the event, true previews only. Send activity_type as Run/Ride/Swim/Workout/WeightTraining/Yoga/Pilates/Stretching/Walk/Hike/Elliptical/NordicSki/HighIntensityIntervalTraining/Other, stas_note for the human workout note, and external_id=plan:YYYY-MM-DD:<slug>. Do not send low-level Intervals fields category, type, sport, workoutType, target, description, workout_doc, icu_workout, filename, or file_contents. The server maps activity_type to Intervals type and category=WORKOUT and infers Intervals target=HR/PACE/POWER from Run/Ride workout_builder only. Use local datetimes without a timezone suffix, e.g. 2026-05-13T08:00:00, not 2026-05-13T08:00:00+03:00. workout_builder is mandatory for any interval/key workout save, mainly Run/Ride intervals; never save intervals as prose-only. Omit workout_builder only for easy/simple workouts without structured steps. If validation fails, inspect error.data.issues[].path, fix that exact event field, and retry only after changing the invalid field. If you use workout_builder, do not include ## STAS or ## Workout; the server adds wrappers. Builder headers and repeat headers are plain lines without '-', e.g. 'Warmup', 'Main Set 5x', 'Cooldown'. Actual step lines start flush-left with '- ' and contain duration/distance plus a target, e.g. '- 1km 4:25/km-4:35/km Pace', '- 10m 75%', or '- Recovery 90s Z1 HR'. For swim workouts, distance-led steps such as '- 400m easy' and '- 6 x 50m build' are allowed. For HR-only workouts, every structured step target should use HR syntax like '- 10m Z2 HR' or '- 3m Z4 HR'. Do not write '- Warmup' followed by indented child bullets. Use '1km' or '1000mtr' for run/ride meters; bare 400m is allowed for swim but m means minutes in run/ride builder text. icu_training_load is accepted for planned workouts, but Intervals.icu can still return icu_atl/icu_ctl as null or exclude/partially weight non-cardio types in Fitness/Fatigue depending on athlete settings. After writing a structured key workout, read it back with get_planned_events and check workout_doc.steps is non-empty before claiming it is structured. Example real interval write arguments. Replace the date/time and paces, but keep this exact JSON shape. Use activity_type, stas_note, and mandatory workout_builder for interval/key workout saves. workout_builder contains only native Intervals.icu Workout Builder text: repeat headers do not start with "-", step lines are flush-left, and nested Markdown bullets are forbidden. {"dry_run":false,"events":[{"activity_type":"Run","name":"Intervals: 5x1000m","start_date_local":"2026-05-13T08:00:00","end_date_local":"2026-05-13T08:55:00","stas_note":"Goal: controlled interval work without overreaching.\nRule: if HR rises too fast or form breaks, stop after 4 reps.","workout_builder":"Warmup\n- 15m Z2 HR\n\nMain Set 5x\n- 1km 4:25/km-4:35/km Pace\n- Recovery 90s Z1 HR\n\nCooldown\n- 10m Z1 HR","external_id":"plan:2026-05-13:intervals-5x1000m","color":"green","moving_time":3300}]}
- delete_note_eventsshallow
Delete STAS note events. For one specific note, pass external_ids with the exact note:YYYY-MM-DD:<slug> id; external_id as one string is accepted as a compatibility alias. Use oldest/newest window deletion only when replacing a whole note set in that date window. Do not delete user-created notes without a note: external_id. dry_run is required: false deletes, true previews only.
- delete_plan_eventsshallow
Delete STAS plan events. For one specific workout, pass external_ids with the exact plan:YYYY-MM-DD:<slug> id; external_id as one string is accepted as a compatibility alias. Use oldest/newest window deletion only when the user is replacing the whole STAS plan in that date window. Do not use window deletion for simple edits; update with create_plan_event using the same external_id instead. dry_run is required: false deletes, true previews only.
- get_activity_detailshallow
Load a compact read-only passport for one completed workout after identifying its training_id with get_trainings. Use for detailed one completed workout questions about intervals, laps, splits, terrain, weather, efforts, segments, and data quality. The response omits source payloads, route coordinates, latlng, and raw stream arrays.
- get_editable_goals_resultsshallow
Read the complete bounded editing state for general goals, calendar-linked starts, race results, standalone results, and legacy results. Stable public IDs and dataVersion are required for every later preview. This tool does not change anything.
- get_goal_activity_candidatesshallow
Read safe nearby activity candidates for one exact start. Use the returned opaque selectionId when previewing result_link_activity. This tool does not change the start, activity, or result.
- get_planned_eventsshallow
Read planned events from the Intervals calendar in a date window. Use this before rewriting or replacing an existing STAS plan.
- get_trainingsshallow
Load one bounded, size-safe chronological list of completed workouts plus historical calendar context (NOTE, SICK, INJURED, HOLIDAY). Context is not a workout and does not consume the training limit. Default mode is a rich index for chronology, load, reports, compact summaries, and choosing training_id; use offset to continue beyond the first 50 completed workouts. Set full=true only for analysis-rich comparison across multiple workouts; it adds a bounded compact interval projection. For one selected completed workout, use get_activity_detail for splits and richer detail; kilometre splits are intentionally omitted from get_trainings in every mode. If listDetail.userReportTruncated=true for a workout, its report was shortened only to keep the whole list within the response budget; call get_activity_detail with that training_id for the complete report.
- get_user_summaryshallow
Start here for most conversations. Load the athlete's profile, goals, rules, recent load, current fitness context, performance evidence, optional bounded historical signals, planning guidance, and persistent STAS memory opportunities. weeklyHistory.recentKeySessionEvidence is the compact 42-day factual register for current planning. It includes all qualifying key sessions unless truncated=true; each row uses columns for date, saved name/type, sourceTrainingId, confirmed actual WORK, confirmed REST only when recorded, and wholeActivity only when no confirmed interval structure exists. It never invents recovery or interval rows; null recovery means no confirmed REST inside that activity. For older comparisons, use get_trainings with a bounded date range, then get_activity_detail for one exact workout. confirmedStructuredIntervals remains a separate verified structured-session index for its stated period; do not infer unshown measurements.
- get_wellnessshallow
Read all locally stored Intervals.icu wellness values for any requested date window; there is no fixed day cap and this read makes no live provider request. The response is column-oriented: dates[i] is the date for every series[field][i] and customSeries[field][i]. null means not recorded, never zero. Only fields with at least one value are returned. window=[oldest inclusive,newest exclusive]; missingRanges uses the same boundaries and names dates for which STAS has no stored wellness row. complete=true means the response is not truncated and includes all meaningful locally stored standard and custom wellness fields; it does not claim the watch/provider supplied every metric. source=intervals_icu_cached_by_stas means values may originate from a watch, another connected source, or manual Intervals.icu entry and are served from STAS cache. Interpret trends against this athlete's own baseline and together with workouts and reports; do not judge readiness or diagnose from one value. CTL is modeled longer-term training load, ATL shorter-term load, and CTL-ATL can be used as Form; higher or lower is not inherently good or bad. HRV is protocol/device dependent and is mainly useful relative to the athlete's own trend. Resting HR is also individual; acute deviation matters more than a universal threshold. sleepSecs is seconds. sleepQuality is 1=Excellent through 4=Poor. soreness/fatigue/stress are 0=None through 4=Extreme, higher is worse. mood/motivation are 1=Excellent through 4=Poor, higher is worse. providerUpdatedAt is the provider record update time, not the measurement time. Preserve custom field names exactly; if a custom field's unit or scale is unclear, do not invent it—describe only its observed trend or ask the user. If the complete response is too large, retry every exact non-overlapping window in suggestedWindows; if none are suggested, explain that one stored day itself cannot be split further by date. Never treat a partial window as the whole request.
- preview_goal_result_changeshallow
Preview one exact change to a general goal, calendar-linked start, activity pairing, race result, standalone result, or legacy result. Always load get_editable_goals_results first and send its exact dataVersion. This never saves. Show the user the exact preview, including calendar/activity effects, and ask for explicit confirmation before commit_goal_result_change.
- preview_profile_section_changeshallow
Create a controlled preview for rules or profile memory. Goals, starts, activities, and results must use preview_goal_result_change so stable IDs and calendar links are preserved. This does not update the athlete profile. Before commit, show the user the exact full text from the preview and ask for explicit confirmation of that exact text.
- read_profile_change_detailshallow
Load the exact full text and hashes for one profile-memory record selected from read_profile_change_history. This is read-only and should be used only for details or before considering a restore.
- read_profile_change_historyshallow
Read a compact paginated index of goals, rules, or profile memory changes. Text bodies and hashes are omitted. Use nextCursor for another page and read_profile_change_detail for one exact record.
- read_profile_sectionsshallow
Read controlled rules and profile memory with their hashes. Goals and results are available only through get_editable_goals_results. Use the returned hash as previousHash before previewing a rules/profile change.
- restore_profile_changeshallow
Restore a committed profile, goals, or rules profile memory change back to its previous text. First load the exact record with read_profile_change_detail. For goals, restoring old-format labels is blocked; rebuild a canonical goals preview instead. Call this only after the user explicitly confirms the exact full text that will be restored.
- save_strategyshallow
Save the athlete preparation map only after explicit user confirmation. The map is the reusable result of long-horizon planning, not a calendar, weekly plan, workout prescription, or full coaching analysis. Target length is about 1800-4000 characters; hard maximum is 5000 characters. Required sections: Goal direction, Current phase, Preparation map, Durable boundaries, Review triggers / unknowns. Build from current goals, rules, profile, lastMetrics, wellness, training history, evidence, reports, and calendar first; treat previous strategy as historical context and contamination risk. Use at least 8 weeks of weekly/load history when available and 12-26 weeks for season direction, combined with exact bounded-list windows and selected detailed workout passports. Treat every dated goal as a real input and infer priority only when explicit. Store the agreed goal relationships, current phase purpose, a broad 3-6 phase route, what each phase develops/preserves/defers, transition conditions, durable boundaries, and causal review triggers. A phase may name its target capacity. Every Durable boundaries line must preserve a route-specific decision and must not repeat universal coaching, measurement, device, load-cost, or athlete rules. Local pain, sleep, recovery, illness, or execution signals change the near-term plan first and become map review triggers only when persistence would change phase feasibility, timing, sequence, or the goal route. Treat phase dates as approximate anchors and Transition when as review evidence, not hard gates; if unmet, consider adaptation, delayed or compressed transition, and remaining runway. Do not store session frequency, easy/hard balance, weekly load targets, number of key workouts, default weekly stimuli, exact progression, workout formats/protocols, fixed taper depth, ready 2-4 week sequences, current Fitness/Fatigue/Form/TL, loaded windows, or live calendar state. Old detailed strategies remain historical context: do not proactively ask the athlete to convert one merely because an internal audit calls it legacy. Create or update the map only when the athlete asks for strategy/season work or explicitly agrees to a long-term route change. Before calling this tool, show the exact full markdown and ask for explicit confirmation. Never show one version and save another.
- whoamishallow
Check which STAS user is currently authenticated. Use only for diagnostics or reconnect troubleshooting.
Embed this server’s score
Tool count and median score across every tool in this server’s corpus — honest in a way a single cherry-picked tool’s badge wouldn’t be.
[](https://vouch.tools/servers/4e02eccc-5df7-4dfb-a72c-8311c7468169)