Suunto MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SUUNTO_CLIENT_ID | Yes | Your Suunto API client ID | |
| SUUNTO_CLIENT_SECRET | Yes | Your Suunto API client secret | |
| SUUNTO_TOKEN_STORAGE | No | Optional storage backend for tokens (e.g., 'keychain') | |
| SUUNTO_SUBSCRIPTION_KEY | Yes | Your Suunto API subscription key |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_workoutsA | Returns the user's recent Suunto workouts ordered newest-first (Workout API v3). Each item: workoutKey (string id), activityId, sport, startTime (epoch ms), totalTime (s), totalDistance (m), totalCalories, avgHeartRate, maxHeartRate, totalAscent (m), totalDescent (m). Auto-paginates with offset-based pagination until limit is reached or no more workouts exist. Use get_workout for full detail (laps, HR zones, sport-specific metrics) on a single result. Read-only. |
| get_workoutA | Returns the full summary for one workout: all fields Suunto exposes including laps, HR zones, training-effect score, and sport-specific metrics (pace zones for running, power for cycling, etc.). Throws SuuntoNotFoundError if the workoutKey does not exist. Use list_workouts to discover valid workoutKey values. For second-by-second time-series (HR, pace, GPS) use get_workout_samples instead. Read-only. |
| get_workout_samplesA | Returns the time-series sample stream for one workout. Each sample: timestamp (ms), heartRate (bpm), speed (m/s), altitude (m), power (W), cadence, latitude, longitude. Sampled at the device's recording interval (typically 1 s). Long workouts (>2 h) may return thousands of records — use get_workout_fit with full=false for a compact summary instead. Throws SuuntoNotFoundError if the key is invalid. Read-only. |
| get_workout_fitA | Downloads the workout's binary FIT file from Suunto and returns it parsed to JSON. Default (full=false): compact summary { sport, total_distance_km, avg_heart_rate, training_effect, laps, records_sample (first 5 / middle 5 / last 5 records) }. Set full=true to receive every parsed FIT record — responses are often >100 KB for long workouts. Use the default for analysis and summaries; full=true only when raw record-level data is required. Read-only. |
| export_workout_gpxA | Returns the workout's GPS route as a GPX 1.1 XML string (not JSON). Each trackpoint contains lat, lon, elevation, and timestamp. Suitable for direct import into Strava, Komoot, Google Earth, or any GPX-compatible tool. Returns a valid but empty GPX document if the workout has no GPS data. Use get_workout_samples for numeric time-series (HR, power, cadence) instead of GPS. Read-only. |
| get_daily_activityA | Returns the 24/7 activity time-series samples for one calendar day from the /247samples API. Each sample includes a timestamp (ISO8601) and activity metrics such as steps and HR. Days without synced data return an empty payload. Use list_daily_activity to fetch a date range. Requires 24/7 Activity API subscription on apizone. Read-only. |
| list_daily_activityA | Returns 24/7 activity time-series samples from the /247samples API for the date range [from, to] inclusive, ordered chronologically by timestamp. Each sample: { timestamp (ISO8601), steps, HR, and other activity metrics }. Days without synced data are omitted. Use get_daily_activity for a single day or get_daily_activity_statistics for aggregated daily step/energy totals. Requires 24/7 Activity API subscription on apizone. Read-only. |
| get_sleepA | Returns sleep time-series samples from the /247samples API for one calendar day: { timestamp (ISO8601), totalSleep (s), deepSleep (s), lightSleep (s), remSleep (s), awake (s), efficiency (%), sleepScore }. Days without recorded sleep return an empty payload. Use list_sleep for a date range. Requires Sleep API subscription on apizone; returns 404 without it. Read-only. |
| list_sleepA | Returns sleep time-series samples from the /247samples API for the date range [from, to] inclusive, ordered chronologically by timestamp. Each entry: { timestamp (ISO8601), totalSleep (s), deepSleep (s), lightSleep (s), remSleep (s), awake (s), efficiency (%), sleepScore }. Nights without recorded sleep are omitted. Use get_sleep for a single night. Requires Sleep API subscription on apizone; returns 404 without it. Read-only. |
| get_recoveryA | Returns recovery and HRV time-series samples from the /247samples API for one calendar day. Each sample: { timestamp (ISO8601), Balance (0.0–1.0 recovery balance), StressState (0=Invalid, 1=Relaxing, 2=Active, 3=Passive, 4=Stressful) }. Days without recovery data return an empty payload. Use list_recovery for a date range. Requires Recovery API subscription on apizone; returns 404 without it. Read-only. |
| list_recoveryA | Returns recovery and HRV time-series samples from the /247samples API for the date range [from, to] inclusive, ordered chronologically by timestamp. Each entry: { timestamp (ISO8601), Balance (0.0–1.0 recovery balance), StressState (0=Invalid, 1=Relaxing, 2=Active, 3=Passive, 4=Stressful) }. Days without recovery data are omitted. Use get_recovery for a single day. Requires Recovery API subscription on apizone; returns 404 without it. Read-only. |
| get_daily_activity_statisticsA | Returns aggregated daily step count and energy consumption (joules) from the /247 API for the given datetime range. Response is an array of AggregatedActivityData objects, each with a Name ('stepcount' or 'energyconsumption'), Aggregation ('sum'), and Sources array containing per-device Samples with TimeISO8601 and Value. Maximum fetch interval is 28 days. Samples with null Value indicate no data synced for that day. Prefer this tool over list_daily_activity when you need totals rather than intraday time-series. Read-only. |
| list_subscriptionsA | Returns all active webhook subscriptions on this Suunto account as an array of { id, eventType, callbackUrl, createdAt }. Returns an empty array if no webhooks are registered. Use to audit which event types are already wired before adding new subscriptions. Requires Subscriptions API product on apizone. Read-only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Most recent workout | Summary of the latest workout synced from your Suunto watch. |
| Last night's sleep | Sleep stages, duration, and score for the most recent night. |
| Today's recovery | Recovery / HRV / stress for today. |
| Today's activity | Steps, calories, and daily heart rate for today. |
| This week's training summary | Aggregated workout count, total duration, and total distance for the current ISO week. |
Latest Blog Posts
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/googlarz/suunto-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server