Skip to main content
Glama
coros-training-mcp

coros-training-mcp

by dholliday3

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
authenticate_corosC

Authenticate with the Coros Training Hub API and store the access token.

authenticate_coros_mobileA

Authenticate with the Coros mobile API only and store the mobile token.

This is needed for sleep data (deep/light/REM/awake phases) which is only available through the mobile API (apieu.coros.com), not the Training Hub web API.

check_coros_authA

Check whether valid Coros access tokens are stored locally.

get_daily_metricsA

Retrieve nightly HRV and daily metrics from Coros for a configurable time range (up to 24 weeks).

Uses the /analyse/dayDetail/query endpoint which returns daily records including HRV, resting heart rate, training load, and fatigue rate.

get_sleep_dataA

Fetch nightly sleep data from Coros for a configurable time range.

Returns per-night sleep stage breakdown (deep, light, REM, awake) and sleep heart rate for each night. Data comes from the Coros mobile API (apieu.coros.com) which is separate from the Training Hub web API.

list_activitiesC

List Coros activities for a date range.

get_activity_detailB

Fetch full detail for a single Coros activity.

export_activity_fileB

Export a completed Coros activity file and save it locally.

list_workoutsA

List all saved library workout programs in the Coros account.

get_workoutA

Fetch one saved workout program in detail.

get_workout_builder_catalogB

Return the checked-in workout builder catalog and enum registry.

The catalog combines:

  • static Training Hub enum extraction from public frontend bundles

  • live builder correlations captured from Training Hub draft calculate payloads

get_run_workout_schemaA

Return the shared run-step contract used by create_run_workout and update_run_workout.

This includes:

  • the plain-step fields accepted by create_run_workout

  • the selector + patch fields accepted by update_run_workout

  • the checked-in live Training Hub intensity labels and their raw COROS presets

  • the human pace input format ('4:05-4:15/km', '5:30/mi') which expands into intensity_type=3 with ms/km intensity_value / intensity_value_extend

get_bike_workout_schemaA

Return the shared bike-step contract used by create_bike_workout and update_bike_workout.

This includes:

  • the plain-step fields accepted by create_bike_workout

  • the selector + patch fields accepted by update_bike_workout

  • the checked-in live Training Hub bike intensity labels (if captured) and their raw COROS presets

  • the human power input format ('220W', '220-260W') which expands into intensity_type=6 with watts in intensity_value / intensity_value_extend

get_strength_workout_schemaA

Return the strength-workout field vocabulary.

This includes:

  • the exercise fields accepted by create_strength_workout

  • the step_updates patch fields accepted by update_workout when the target is a strength program (strength reuses the generic update_workout tool)

  • the target_type aliases ('time', 'reps') and how to look up exercises via list_exercises(sport_type=4)

Use this before authoring or editing a strength workout so the patch vocabulary is explicit rather than guessed.

create_workoutB

Create a new structured workout in the Coros account.

The workout appears in the Coros app under Workouts and can be synced to the watch for guided execution.

create_run_workoutA

Create a running workout with explicit run-step semantics.

Use get_run_workout_schema for the exact accepted fields.

Each plain step uses the shared run-step contract:

  • kind: warmup, training, rest, cooldown, interval

  • target_type: time, distance, or open

  • target_duration_seconds or target_distance_meters (omit both for open steps — an open step has no target and runs until the athlete presses the lap button, which is how you author an open warm-up or cool-down)

Optional fields include:

  • name

  • overview

  • intensity_label

  • raw intensity fields like intensity_type, hr_type, is_intensity_percent, intensity_percent, intensity_percent_extend, intensity_value, intensity_value_extend, intensity_display_unit

  • rest_type

  • rest_value

  • sets

Repeat groups use:

  • repeat

  • steps

Repeat groups use:

  • repeat

  • steps

Notes:

  • intensity_label can now use the checked-in live Training Hub labels such as Pace, % Threshold Pace, Heart Rate, or % Max Heart Rate.

  • The tool sets COROS running sportType = 1.

create_bike_workoutA

Create a cycling workout with explicit bike-step semantics.

Use get_bike_workout_schema for the exact accepted fields.

Each plain step uses the shared bike-step contract:

  • kind: warmup, training, rest, cooldown, interval

  • target_type: time, distance, or open

  • target_duration_seconds or target_distance_meters (omit both for open steps — an open step has no target and runs until the athlete presses the lap button)

Optional fields include:

  • name

  • overview

  • intensity_label (values come from the checked-in live Training Hub bike correlations — common labels: Power, %FTP, Heart Rate, % Max Heart Rate, % Lactate Threshold HR, Cadence, Speed)

  • power: human string like '220W' or '220-260W', expands to intensity_type=6 with watts in intensity_value / intensity_value_extend

  • raw intensity fields like intensity_type, hr_type, is_intensity_percent, intensity_percent, intensity_percent_extend, intensity_value, intensity_value_extend, intensity_display_unit

  • rest_type

  • rest_value

  • sets

Repeat groups use:

  • repeat

  • steps

Notes:

  • The tool sets COROS cycling sportType = 2.

  • If bike intensity_label presets aren't available yet (catalog not captured), pass the raw intensity fields directly or use power.

update_workoutA

Clone an existing workout, apply edits, and create a replacement workout.

Sport-agnostic: works for running, cycling, and strength library workouts. For strength-specific field vocabulary and examples, call get_strength_workout_schema. For run-specific schema, use get_run_workout_schema.

This does not mutate the original workout in place. The replacement workout is created in the library, and the caller can optionally delete the old workout afterward.

update_run_workoutA

Clone a running workout, apply run-specific edits, and create a replacement.

Use get_run_workout_schema for the exact accepted fields.

Each update item requires one selector:

  • step_index

  • step_id

  • step_name

After that, it accepts the same run-step fields as create_run_workout, including kind, target_type, target_duration_seconds, target_distance_meters, intensity_label, and the raw COROS intensity fields.

update_bike_workoutA

Clone a cycling workout, apply bike-specific edits, and create a replacement.

Use get_bike_workout_schema for the exact accepted fields.

Each update item requires one selector:

  • step_index

  • step_id

  • step_name

After that, it accepts the same bike-step fields as create_bike_workout, including kind, target_type, target_duration_seconds, target_distance_meters, intensity_label, power, and the raw COROS intensity fields.

delete_workoutC

Delete a workout program from the Coros account.

list_planned_activitiesC

List planned (scheduled) activities from the Coros training calendar.

list_scheduled_workoutsB

List scheduled workout entries in a calendar-friendly format.

These are calendar occurrences, not just library workouts. Each scheduled item carries plan-specific identifiers needed for move/remove/replace flows.

schedule_workoutC

Add an existing workout from the library to the Coros training calendar.

remove_scheduled_workoutB

Remove a scheduled workout from the Coros training calendar.

move_scheduled_workoutA

Move a scheduled workout to a new day.

The source-of-truth is the existing scheduled entry identified by (plan_id, id_in_plan). Its embedded program is used to re-schedule on happen_day, which supports both library workouts AND plan-embedded programs from subscribed training plans (which have no library entry).

Order of operations is schedule-new → remove-old, so a failure leaves a duplicate rather than losing the workout. A pre-flight lookup verifies the scheduled entry exists before anything destructive runs.

replace_scheduled_workoutA

Replace a scheduled workout by cloning the library workout, applying edits, scheduling the replacement, and removing the old scheduled entry.

create_strength_workoutC

Create a new structured strength workout program.

list_exercisesA

List the exercise catalogue for a given sport type.

Useful for resolving strength/conditioning exercises (sport_type=4) that appear in planned workouts by name and ID.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 29 tools

Disambiguation3/5

Most tools have distinct purposes, but there is real overlap between generic create_workout/update_workout and the sport-specific create_run_workout, create_bike_workout, create_strength_workout, update_run_workout, and update_bike_workout tools. list_planned_activities and list_scheduled_workouts also have fuzzy boundaries, and the catalog/schema tools require careful reading to distinguish.

Naming Consistency5/5

Tool names consistently use snake_case with a verb_noun pattern, such as list_activities, get_activity_detail, create_run_workout, and delete_workout. A few names are longer or slightly differently ordered, but the convention is predictable throughout.

Tool Count2/5

With 29 tools, the surface is heavy for the server's scope and likely could be consolidated. Sport-specific create/update variants plus separate schema/catalog tools and multiple scheduling tools push the count above what is comfortably scannable.

Completeness4/5

The server covers auth, daily metrics, sleep, activities, workout library CRUD, sport-specific workout authoring, scheduling, and exercise lookup. Minor gaps remain, such as no dedicated strength-specific update tool and limited scheduled-entry detail, but most workflows can be worked around.

Maintenance

ActivityInactive
ResponsivenessLimited data