coros-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| COROS_EMAIL | No | Coros account email address | |
| COROS_REGION | No | Coros region (eu, us, or asia). Defaults to eu. | eu |
| COROS_PASSWORD | No | Coros account password |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_helpA | List all available Coros MCP tools with a short description of each. |
| authenticate_corosA | 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. By default this is a LOCAL check only: |
| get_daily_metricsA | Retrieve nightly HRV and daily metrics from Coros for a configurable time range (up to 52 weeks). Historical data is served from the local SQLite cache (fast); only the uncached tail is fetched from the Coros API. The underlying API endpoint supports up to 24 weeks per call; the cache layer fetches longer uncached ranges in 12-week chunks, so any range up to 52 weeks works even on a cold cache. |
| 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_detailA | Fetch detail for a single Coros activity. |
| list_workout_templatesA | List reusable workout templates saved in the Coros library. These are templates created by save_workout_template / save_strength_workout_template — schedulable later via schedule_workout_template. One-off workouts scheduled with schedule_workout / schedule_strength_workout do NOT appear here. Returnsdict with keys: workouts (list), count Each entry contains: id, name, sport_type, sport_name, estimated_time_seconds, exercise_count, exercises (list of steps with name, duration_seconds, intensity_low, intensity_high, sets) |
| list_training_plansB | List training plans in the Coros account. |
| list_training_plans_rawA | List training plans without stripping API fields. Use this when the full plan payload is needed, including entities and programs (e.g. to drive update_scheduled_workout). |
| save_workout_templateA | Save a REUSABLE cycling/intervals/running workout TEMPLATE to the Coros library. ⚠️ This persists to the library indefinitely. Use ONLY when the user explicitly asks to "save as a template", "create a workout in my library", "add to my workout list", or otherwise indicates they want a reusable template. For a ONE-OFF workout for a specific date — the common case — use schedule_workout instead. That tool builds the workout inline and leaves no library residue. If the user's intent is unclear, ASK THEM: "Do you want this saved as a reusable template in your library, or just scheduled as a one-off for [date]?" Don't guess. The saved template appears in the Coros app under Workouts and can be synced to the watch for guided execution. |
| delete_workout_templateA | Delete a saved workout TEMPLATE from the Coros library. |
| list_planned_activitiesA | List planned (scheduled) activities from the Coros training calendar. |
| list_planned_activities_rawA | List planned activities without stripping API fields. Use this before updating an existing scheduled workout. The raw entity and program objects contain the identifiers and version fields required by update_scheduled_workout (planId, planProgramId, idInPlan, version, ...). |
| calculate_workout_programA | Recalculate a workout program after editing its exercises. This calls Coros /training/program/calculate and returns the calculated metrics plus a copy of the supplied program with derived fields such as duration, estimated distance, training load, and exerciseBarChart applied. Feed the returned program into update_scheduled_workout when its exercises changed. |
| schedule_workout_templateA | Add an existing library workout TEMPLATE to the training calendar. Use this only when scheduling a previously-saved template by ID. For a one-off workout that doesn't need to live in the library, use the inline tools instead: schedule_workout (cycling/intervals) or schedule_strength_workout (strength). |
| schedule_workoutA | Schedule a ONE-OFF cycling/intervals/running workout for a specific date. This is the COMMON case. Use this whenever the user wants a workout on a specific date and doesn't explicitly ask for a reusable template. Does NOT save to the Coros library — leaves no template behind. For a REUSABLE library template instead, use save_workout_template (which saves it for re-scheduling later via schedule_workout_template). If the user's intent is unclear, ASK THEM: "Do you want this saved as a reusable template in your library, or just scheduled as a one-off for [date]?" Don't guess. |
| add_planned_workoutA | Add an inline planned workout to the Coros training calendar. This is a low-level escape hatch for callers that already hold raw entity / program objects (e.g. copied from list_planned_activities_raw). For the common case of building and scheduling a workout, prefer schedule_workout. |
| update_scheduled_workoutA | Update an existing scheduled workout on the Coros training calendar. Workflow: fetch the day with list_planned_activities_raw, edit the entity / program objects, and (if exercises changed) run them through calculate_workout_program first to refresh derived metrics. |
| schedule_strength_workoutA | Schedule a ONE-OFF strength workout for a specific date. This is the COMMON case. Use this whenever the user wants a strength workout on a specific date and doesn't explicitly ask for a reusable template. Does NOT save to the Coros library — leaves no template behind. For a REUSABLE library template instead, use save_strength_workout_template (which saves it for re-scheduling later via schedule_workout_template). If the user's intent is unclear, ASK THEM: "Do you want this saved as a reusable template in your library, or just scheduled as a one-off for [date]?" Don't guess. |
| remove_scheduled_workoutA | Remove a scheduled workout from the Coros training calendar. |
| save_strength_workout_templateA | Save a REUSABLE strength workout TEMPLATE to the Coros library. ⚠️ This persists to the library indefinitely. Use ONLY when the user explicitly asks to "save as a template", "create a workout in my library", "add to my workout list". For a ONE-OFF workout for a specific date — the common case — use schedule_strength_workout instead. That tool builds the workout inline and leaves no library residue. If the user's intent is unclear, ASK THEM: "Do you want this saved as a reusable template in your library, or just scheduled as a one-off for [date]?" Don't guess. |
| 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. |
| sync_coros_dataA | Sync Coros data for a date range into the local SQLite cache. After the first full sync, subsequent calls to get_daily_metrics, get_sleep_data, and list_activities will serve historical data from cache and only fetch the incremental tail from the API. For large date ranges (> 6 months), call this tool in segments to avoid timeout (e.g. one segment per year). For the initial full historical backfill, use the CLI instead: coros-mcp sync --from 20230101 |
| get_cache_statusA | Show what data is currently stored in the local cache. Returnsdict with keys: daily_records, sleep_records, activities — each with:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cygnusb/coros-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server