STAS Running Coach for Claude
Official15 toolsby stas
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Connects AI to Intervals.icu fitness watch data for workout analysis and planning.
Captured live from the server via tools/list.
get_user_summary
Start here for most conversations. Load the athlete's profile, goals, rules, recent load, current fitness context, performance evidence, planning guidance, and persistent STAS memory opportunities.
Parameters (1)
- sectionstring
get_trainings
Load recent workouts with pace, heart rate, sport metrics, intervals, and athlete reports. Use after the summary when analyzing load, progress, fatigue, or consistency.
Parameters (4)
- oldeststring
Start boundary date in YYYY-MM-DD, inclusive.
- neweststring
End boundary date in YYYY-MM-DD, exclusive. To load one date, set newest to the next calendar date, for example oldest=2026-06-21 and newest=2026-06-22.
- limitinteger
Max trainings per page. Server cap is 50.
- fullboolean
Set true when analyzing workouts, reports, intervals, history, or planning context.
get_activity_detail
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.
Parameters (1)
- training_idstringrequired
Training id returned by get_trainings. Load get_trainings first to identify the exact workout.
get_planned_events
Read planned events from the Intervals calendar in a date window. Use this before rewriting or replacing an existing STAS plan.
Parameters (2)
- oldeststringrequired
- neweststringrequired
whoami
Check which STAS user is currently authenticated. Use only for diagnostics or reconnect troubleshooting.
No parameters.
create_plan_event
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 workout_builder. 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 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 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 meters; 'm' means minutes. 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}]}
Parameters (2)
- eventsarrayrequired
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}]}
- dry_runbooleanrequired
Required. false writes to Intervals.icu; true only previews without writing.
create_note_event
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.
Parameters (2)
- eventsarrayrequired
- dry_runbooleanrequired
Required. false writes to Intervals.icu; true only previews without writing.
delete_plan_events
Delete STAS plan events. For one specific workout, pass external_ids with the exact plan:YYYY-MM-DD:<slug> id. 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.
Parameters (4)
- oldeststring
Start date for full-window replacement deletes. Required unless external_ids is provided.
- neweststring
End date for full-window replacement deletes. Required unless external_ids is provided.
- external_idsarray
Exact STAS event ids to delete. Use this for deleting specific workouts or notes without clearing the whole day/window.
- dry_runbooleanrequired
Required. false writes to Intervals.icu; true only previews without writing.
delete_note_events
Delete STAS note events. For one specific note, pass external_ids with the exact note:YYYY-MM-DD:<slug> id. 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.
Parameters (4)
- oldeststring
Start date for full-window replacement deletes. Required unless external_ids is provided.
- neweststring
End date for full-window replacement deletes. Required unless external_ids is provided.
- external_idsarray
Exact STAS event ids to delete. Use this for deleting specific workouts or notes without clearing the whole day/window.
- dry_runbooleanrequired
Required. false writes to Intervals.icu; true only previews without writing.
save_strategy
Save the athlete's long-term STAS strategy only after explicit user confirmation. Strategy is a compact long-term roadmap, not a calendar, not a weekly plan, and not a full coaching analysis. Target length is about 2500-4500 characters; hard maximum is 5000 characters. Required markdown sections: Goal chain, Current point, Weekly decision contract, Roadmap, Resources / risks, Review triggers / unknowns. Build the strategy from current goals, rules, profile, condition, training history, evidence, and calendar first; do not copy or paraphrase the previous saved strategy's wording, race labels, priorities, phase names, or workout examples unless current facts independently support them. For strategy-level work, use at least 8 weeks of weekly/load history when available, 12-26 weeks for season direction; if a long full-training request is too large, split windows or combine weekly history with selected full workouts instead of using only 2-4 weeks. Treat every dated goal as a real planning input by default. Do not infer a single main goal from distance, later date, target result, profile order, or old strategy wording; use priority only when it is explicit in the current profile, goal comment, athlete message, or current coaching decision. B/C/training-race/no-full-taper wording changes peak depth and risk; it does not mean the race should be ignored unless the athlete explicitly says the result does not matter. The roadmap must be the main content and say what each block prepares directly, keeps ready in the background, and leaves out for now with a reason. Do not hide a block-driving goal behind vague background wording. Keep Weekly decision contract short; it is guardrails for the blocks, not the center of the strategy. Do not write day-by-day or 8-week calendar progression inside strategy; that belongs in block planning or calendar tools. Use for meaningful changes to goals, constraints, current position, roadmap, or long-term training logic, not for one-off weekly edits. Before calling this tool, show the user the exact full markdown that will be saved and ask for explicit confirmation. Never show one version and save another.
Parameters (1)
- strategy_mdstringrequired
Compact long-term STAS roadmap markdown, not a calendar, not a weekly plan, and not a full coaching analysis. Target length is about 2500-4500 characters; hard maximum is 5000 characters. Required sections: Goal chain, Current point, Weekly decision contract, Roadmap, Resources / risks, Review triggers / unknowns. Build from current goals, rules, profile, condition, training history, evidence, and calendar first; do not copy or paraphrase previous_strategy unless current facts independently support the same durable decision. For strategy-level work, use at least 8 weeks of weekly/load history when available, 12-26 weeks for season direction; if a long full-training request is too large, split windows or combine weekly history with selected full workouts instead of using only 2-4 weeks. Treat every dated goal as a real planning input by default; do not infer a single main goal from distance, later date, target result, profile order, or old strategy wording. Use priority only when it is explicit in the current profile, goal comment, athlete message, or current coaching decision. B/C/training-race/no-full-taper wording changes peak depth and risk; it does not mean the race should be ignored unless the athlete explicitly says the result does not matter. Roadmap must be the main content and say what each block prepares directly, keeps ready in the background, and leaves out for now with a reason. Do not hide a block-driving goal behind vague background wording. Keep Weekly decision contract short; it is guardrails for the blocks, not the center of the strategy. Do not write day-by-day or 8-week calendar progression inside strategy; that belongs in block planning or calendar tools. Before save_strategy, show the user the exact full markdown and save only after explicit confirmation. Never show one version and save another.
read_profile_sections
Read controlled STAS profile memory sections with their hashes. Supports goals, rules, and profile when enabled by the server. Use the returned hash as previousHash before previewing a change.
No parameters.
preview_profile_section_change
Create a controlled preview for a goals, rules, or profile memory section change. For goals, prefer a structured goals items list with date, goal, target result, and comment; the server builds canonical `Цели:` blocks and rejects old labels such as `Промежуточные:`. newText is a legacy fallback and must already be canonical for goals. 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. Visible confirmation copy is governed by a separate approved UX spec; do not invent final chat-copy inside this tool call.
Parameters (5)
- sectionstringrequired
Profile memory section to update. Supports goals, rules, and profile when enabled by the server.
- structuredobject
Preferred input. For goals, send a goals items list with date, goal, targetResult, and comment. For rules/profile, send only the matching object.
- newTextstring
Legacy fallback full section text. For goals it must already use canonical `Цели:` blocks with no conflict or choice-rule block; old labels are rejected.
- previousHashstringrequired
Hash returned by read_profile_sections for the same section. Used to prevent overwriting newer profile data.
- diffSummarystring
Short internal summary of the factual change. Do not include raw chat transcript.
commit_profile_section_change
Commit a previously previewed goals, rules, or profile memory section change. Call this only after the user explicitly confirms the exact full text shown for that preview. The server updates the profile only if the section hash still matches the preview. Visible confirmation copy is governed by a separate approved UX spec.
Parameters (1)
- changeIdintegerrequired
Preview change id returned by preview_profile_section_change. Call only after the user explicitly confirms the exact full text shown for this preview.
read_profile_change_history
Read goals, rules, or profile memory change history. Use this to inspect previewed, committed, restored, or expired changes before restore decisions.
Parameters (3)
- sectionstring
- statusstring
- limitinteger
restore_profile_change
Restore a committed profile, goals, or rules profile memory change back to its previous text. 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. The server restores only if the current section still matches the committed change. Visible confirmation copy is governed by a separate approved UX spec.
Parameters (1)
- changeIdintegerrequired
Committed change id to restore. Call only after the user explicitly confirms the exact full text that will be restored. Restore only succeeds when the current section still matches that change.
README not available yet.
Install
Remote endpoint
Streamable HTTPHosted server - connect over the network, no local install.
https://stas.run/api/mcpclaude_desktop_config.json
{
"mcpServers": {
"stas": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://stas.run/api/mcp"
]
}
}
}Desktop config is stdio-only; this bridges via mcp-remote. Native remote: Settings > Connectors.