Herramientas y capacidades de MCP
En esta página
garmlink expone tus datos de Garmin sincronizados a Claude y ChatGPT como 48 herramientas de Model Context Protocol — 47 de lectura, 1 de escritura (una actualización de sincronización con límite de frecuencia), más 6 prompts de entrenador y 4 recursos.
https://api.garmlink.ai/mcpv0.2.0Empieza: conectar desde Claude · conectar desde ChatGPT
Activities · 8 herramientas
The user's Garmin activities, most recent first, with optional type/date filters. Each row carries the compact basics (id, type, name, start_time, duration_s, distance_m, calories, avg_hr) PLUS a `brief` of sport metrics (avg speed, max HR, elevation gain, SWOLF/strokes for swims, cadence for runs, power for rides) — enough to compare sessions without fetching details. The response's `synced_at` says how fresh the data is. Splits and HR zones are available from garmlink_activities_get, which takes several ids in one call.
Full detail for a single activity: the summary (nulls stripped) plus splits, typed splits and HR zones (weather on request via `include`). Several activities at once: garmlink_activities_get (batch form of this tool). Sample-by-sample data: garmlink_activity_timeseries.
Batch form of garmlink_activity_get: full detail for up to 20 activities in one call — summaries (nulls stripped) plus splits, typed splits and HR zones per activity (weather via `include`). One round trip covers all the ids. Ids the user does not own come back in `not_found`.
Downsampled sample-by-sample series for an activity. The field names are the FIT ones, and `pace` is not among them. The series an activity can carry: heart_rate (bpm), enhanced_speed/speed (m/s, from which pace follows), enhanced_altitude/altitude (m), power (W), cadence (rpm, or steps per minute per leg when running), temperature (°C), distance (m, cumulative), position_lat/position_long (degrees — the worker converts Garmin's semicircles before storing), plus running dynamics (vertical_oscillation, vertical_ratio, stance_time, stance_time_percent, step_length) and respiration_rate. Buckets to <= `points` samples with per-bucket averages, and always reports the true global min/max/avg per field. Full 1 Hz data lives in the raw FIT; this is LLM-sized.
Aggregated training volume over a date range, grouped by sport, month or ISO week: activity count, total distance (km), duration (h), calories and average HR per bucket.
The SETS of a strength session: for each one, the movement performed, the repetitions, the load, the duration and which side — the part of a weights session that makes it a training session at all. Without it a squat workout and a walk of the same length are the same three numbers (duration, heart rate, calories), which is why 'am I progressing on squats' could not be answered before. Returns null for an activity that is not set-based, which is most of them — that null means 'not a strength session', never 'the session was empty'. Activity ids come from garmlink_activities_list.
The derived facts for one activity, computed server-side: pace in the sport's own unit (per km, per 100 m, per 500 m, km/h), the session's detected structure (continuous vs an interval set, from the watch's own typed splits when it recorded them), rest time hiding between elapsed and moving duration, first-half vs second-half pace and heart-rate drift, time-in-zone shares, running mechanics (cadence, ground contact, stride, vertical ratio) start-to-finish, swim length statistics with misdetected lengths flagged, and a comparison against the athlete's most recent comparable session of the SAME sport at a similar distance. The numbers are computed rather than estimated; garmlink_activity_get returns the underlying raw summary, splits and HR zones.
A downloadable GPX 1.1 track for ONE activity — the file Strava, Komoot, RideWithGPS and every mapping tool import. Returns a signed download link valid one hour (NOT the file itself: a long ride is megabytes of XML), plus the track's point count, distance and bounding box. The `download_url` field is a plain URL to the file. Indoor sessions have no GPS and come back as `no_track` (an expected outcome, not an error).
Daily health · 15 herramientas
Daily sleep summaries, newest first — one compact object per night: total_min and per-stage minutes (deep_min/light_min/rem_min/awake_min), sleep score, skin_temp_deviation_c (deviation from the wearer's OWN calibrated baseline — the earliest illness/overreaching signal here), restless_moments, body_battery_change (what the night gave back), breathing_disruptions per hour, hrv_status, lowest_spo2/avg_sleep_spo2, plus overnight avg_spo2, avg_respiration, resting_hr and overnight_hrv when measured. Covers sleep quality, duration and recovery trends. Hollow (unmeasured) nights are omitted.
Daily heart-rate-variability summaries, newest first: last_night_avg (overnight rMSSD, ms), weekly_avg, last_night_5min_high, HRV status (BALANCED/UNBALANCED/LOW/…) AND the wearer's personal baseline band (baseline_low/baseline_high) — the value is meaningful against that band, not against a population average: 58 ms depends on this person's balanced range. Covers autonomic recovery and readiness trends. The raw per-reading series is in garmlink_daily_metric_get(family:'hrv', full:true).
Daily all-day stress summaries, newest first: avg and max stress level (0-100). Shows how stress load evolves across days. The time-in-zone breakdown (rest_min/low_stress_min/medium_stress_min/high_stress_min/activity_stress_min) is not part of this family; those durations are on the day rollup, garmlink_daily_summary_get. The per-minute series is in garmlink_daily_metric_get(family:'stress', full:true).
Daily Body Battery summaries, newest first: charged and drained totals (energy points gained resting/sleeping vs spent) for the day. Relates energy reserves to sleep, stress and activity. This family is a list of events, so it carries neither the day's levels nor the curve. The day's high, low, at-wake and during-sleep values are on garmlink_daily_summary_get (bb_highest/bb_lowest/bb_at_wake/bb_during_sleep); the intraday curve is in garmlink_daily_metric_get(family:'stress', full:true) — Garmin ships bodyBatteryValuesArray inside the stress record, not this one.
Daily step totals, newest first: total steps walked that day. Tracks daily movement. Distance, floors and the step goal for the day are on garmlink_daily_summary_get (step_goal) — the raw steps payload is 15-minute buckets and carries no goal. Those buckets are in garmlink_daily_metric_get(family:'steps', full:true).
Daily heart-rate summaries, newest first: resting, min, max HR (bpm) and resting_avg_7d — resting_avg_7d is the seven-day average, steadier than a single night's value. Tracks resting-HR trends and daily cardiac load. The intraday HR series is in garmlink_daily_metric_get(family:'heart_rate', full:true).
Daily respiration summaries, newest first: avg_waking and avg_sleep (they are different measurements — the sleeping rate is the recovery signal), plus min and max breaths per minute, and `avg` for continuity. Covers breathing-rate trends and recovery.
Daily pulse-ox (SpO2) summaries, newest first: avg_sleep (the clinically interesting one — the all-day average is diluted by waking readings), low, latest, avg_7d and avg. Covers altitude acclimation and overnight oxygen trends.
Daily floors summaries, newest first: floors ascended and descended that day. Tracks vertical movement.
Daily intensity-minutes summaries, newest first: the day's moderate_min and vigorous_min, the running weekly_total and weekly_moderate/weekly_vigorous against the week_goal, and week_goal_met_on — the day Garmin recorded the weekly target as reached, or absent if it was not. Shows adherence to activity-intensity guidelines.
Daily hydration records, newest first: fluid intake versus goal and sweat-loss estimates (ml). Tracks hydration habits.
Daily blood-pressure records, newest first: systolic/diastolic readings and pulse from Garmin Index BPM or manual entries. Tracks blood-pressure trends.
The single-glance all-day rollup, newest first — the richest daily object garmlink serves. Steps, calories, distance_m, active_min, floors, PLUS the goals Garmin set for this wearer (step_goal/floors_goal/intensity_minutes_goal — the only way to answer whether a target was hit), where the day's stress went (rest_min/low_stress_min/medium_stress_min/high_stress_min/activity_stress_min, stress_avg/max/qualifier), the body battery as a day rather than a net (bb_charged/bb_drained/bb_highest/bb_lowest/bb_at_wake/bb_during_sleep), the calorie split (bmr_calories/active_calories/consumed_calories), the time budget (sleeping_min, sedentary_min, and highly_active_min which is a subset of active_min, not a sibling of it), resting_hr with resting_hr_avg_7d, abnormal_hr_alerts (the watch flagged an abnormally high resting heart rate), avg_altitude_m, and measured_from/measured_to — the window the watch was actually worn, without which two days with identical averages are not comparable. Covers day-level overviews and multi-metric daily trends; each specific family (garmlink_sleep_get, garmlink_stress_get, …) carries its own detail.
Generic escape hatch: any Garmin daily family by name over a date window, newest first. Returns the same compact per-day summary as the dedicated getters by default; full:true returns the RAW record (all intraday arrays), which is large. Every family except all_day_events has a dedicated getter (garmlink_sleep_get, garmlink_stress_get, …); this tool is the only one serving all_day_events, and serves the raw record of any family. Returns an error object listing valid families if the name is unknown.
A year of WEEK-level totals in one payload — steps (total and daily average, distance, days the watch was worn), stress, and intensity minutes against the weekly goal. Garmin computes these week buckets itself, and they cover questions like 'how has this year gone' or 'which week was my biggest'; the same totals summed from daily rows take a long range and count partially-worn days as low ones. Single days and short spans are covered by the daily tools (garmlink_steps_get, garmlink_stress_get, garmlink_intensity_minutes_get). A series Garmin had nothing for is absent from the payload rather than present and empty.
Training & physiology · 13 herramientas
Garmin Training Status snapshots over time (productive, maintaining, peaking, overreaching, detraining, recovery, unproductive…), with acute/chronic load balance and load focus. Indicates whether training is productive or recovery is needed.
History of Garmin max-metrics snapshots — chiefly VO2max (running and cycling) and related fitness estimates. Shows cardiovascular fitness trends over weeks and months.
Garmin Fitness Age snapshots and the contributing factors Garmin exposes (VO2max, resting HR, activity intensity, body composition where available). Shows how the estimated fitness age is trending.
Garmin's predicted race finish times (5K, 10K, half-marathon, marathon) captured over time. Shows current running performance potential and its trajectory.
Garmin Endurance Score snapshots — the composite measure of the user's ability to sustain effort over long durations, with its level/category. Shows endurance development over time.
Garmin Hill Score snapshots — the measure of climbing strength and endurance on uphill efforts, with its category. Shows how hill/climbing ability is progressing.
Garmin personal records snapshots (fastest 1K/5K/10K, longest run/ride, most ascent, best power, etc.). Gives all-time bests and when they were set.
Garmin body-composition snapshots (weight, BMI, body fat %, muscle mass, bone mass, body water, etc.), typically from a connected smart scale. Shows weight and composition trends over time.
The user's currently configured training zones: heart-rate zones, power zones and cycling FTP (each the latest snapshot). Gives the reference for zone-based effort in activities and target zones.
Sin argumentos.
Daily Garmin Training Readiness, newest first: score (0–100), level, Garmin's own feedback phrase — and the six factors that produce the score, each with its percentage contribution and Garmin's plain-language verdict: sleep score, recovery time (plus recovery_trend), HRV, sleep history, stress history, and acute load / ACWR. A readiness of 12 is not actionable on its own; `recovery_pct: 5, acwr_pct: 20` says exactly what pulled it down. Also measured_at and valid_sleep (false = the score was computed without a usable night, which is why a reading can look wrong). Shows whether today suits a hard session or recovery, and why.
The runner's current lactate threshold: the heart rate and the pace at which lactate starts accumulating faster than the body clears it — i.e. the ceiling above which an effort stops being sustainable. It is the number tempo and threshold sessions are prescribed from, and the one that moves when a training block works. Garmin revises it after a hard effort rather than every day, so this is a standing estimate with its measurement date, not a daily series. Covers threshold pace and heart rate, tempo-run pacing and threshold changes over time.
Weekly running tolerance: the running load the body currently absorbs, against the load actually run, over the past year. It answers the question training status cannot — not 'how fit am I' but 'how much running can I add right now without breaking'. A week run far above tolerance is where injuries are booked. Covers mileage ramp-up, whether a jump in volume is safe, and accumulated running fatigue.
Individual weigh-ins over the stored window, each with its date, its source device and every metric the scale measured — weight, body fat, body water, muscle mass, bone mass, BMI. This is the reading-by-reading record; garmlink_body_composition_get carries Garmin's summary of the same window. Covers the weight on a given day, how weight has moved, and one odd reading versus a trend.
Profile & devices · 4 herramientas
The user's Garmin gear snapshots (shoes, bikes and other tracked equipment) with accumulated mileage/usage. Most recent snapshot first. Covers how far a pair of shoes or a bike has been ridden/run, and when gear was retired.
The user's registered Garmin devices (e.g. Fenix 8, HRM straps, bike computers) as captured snapshots, most recent first. Covers which watch/sensors are paired, firmware/model details, and which device recorded the data.
The user's latest Garmin profile snapshot: display name, personal details, physiological settings and preferences. Returns the single most recent snapshot.
Sin argumentos.
Solar charging for the watches that have a panel: the daily solar input over the stored window, keyed by device and carrying each watch's display name — a household with two Garmins would otherwise read as one. Absent entirely for a watch without a panel, which is not an error. Covers solar charging, battery autonomy and the sun a trip gave.
Sync · 2 herramientas
Garmin connection state plus last successful sync time and the most recent sync runs (status, scope, timing, counts). Shows whether the account is connected, when it last synced, and whether a sync is currently running or recently failed.
Sin argumentos.
Triggers an on-demand sync that fetches the freshest data from the user's Garmin account (it contacts Garmin; the only tool that does). Rate-limited to at most once per 15 minutes; if a sync ran recently it returns status:rate_limited with retry_after_s. Non-destructive — it only fetches and appends new data, never deletes anything. Returns {status:'started'} on success; {status:'busy', retry_after_s} when the sync service is at capacity (not counted against the limit); {status:'already_running'} when a sync is already in progress. On success it also returns whatever the worker echoed back — sync_run_id is present only when the worker supplies it; garmlink_sync_status reports the sync's progress either way. Requires a connected account; returns {error:'not_connected'} otherwise. On the demo account there is nothing to fetch: it returns {status:'demo', message} and starts no sync. When the sync service cannot be reached it returns {error:'worker_unavailable', detail}.
Sin argumentos.
Peripheral data · 6 herramientas
The user's stored golf-round summaries (scores, handicap, course stats), most recent first. Covers golf performance and rounds played.
The Garmin badges the user has earned (challenges, milestones, streaks), most recent first. Covers achievements, badges and Garmin challenges.
The user's Garmin goals (step targets, distance/activity goals and their progress), most recent first. Covers the goals set and how close they are to being reached.
Daily nutrition logs (calories in, macros, water/food entries) per day, newest first, optionally bounded by a date range. Covers food intake, calories consumed and macros over time.
Daily menstrual-cycle tracking (cycle phase, day, logged symptoms) per day, newest first, optionally bounded by a date range. Covers cycle tracking.
Any stored snapshot by its kind, so every synced snapshot type is reachable, even those without a dedicated tool. Returns the most recent snapshots for that kind first. Catch-all for snapshot kinds that have no dedicated tool.
Prompts · 6
Flujos de entrenador listos para usar: cada uno indica la secuencia exacta de herramientas que ejecuta la IA.
Summarize the last 7 days of training: total load per sport, standout sessions, and how sleep, HRV and training status say the body is coping.
Mostrar flujo
Produce a coach-style review of the athlete's last training week. Call the tools in this order and reason over the combined results: 1. garmlink_stats_summary with group_by="sport" over the last 7 days (from = 7 days ago, to = today) to get per-sport volume, distance, duration and load. 2. garmlink_activities_list for the same 7-day window to enumerate every session (type, date, distance, duration, average HR). 3. garmlink_sleep_get for the last 7 days to gauge nightly sleep duration and quality. 4. garmlink_hrv_get for the last 7 days to read the overnight HRV trend (rising, stable, or suppressed). 5. garmlink_training_status_get to capture the current training status, acute load and load balance. Then synthesize: total training load and how it splits across sports, the 1-2 standout/hardest sessions of the week, and whether recovery signals (sleep + HRV + training status) suggest the athlete absorbed the load or is dipping into fatigue. End with one concrete recommendation for the coming days.
Assess how ready the athlete is for a target race by combining race-time predictions, training readiness, training status, VO2max trajectory and recent HRV.
Mostrar flujo
Evaluate the athlete's readiness for an upcoming target race. Ask the user for the race distance/date if it is not already known, then call the tools in this order: 1. garmlink_race_predictions_get to retrieve Garmin's predicted finish times (5K, 10K, half, marathon) and compare them against the athlete's target. 2. garmlink_readiness_get to read today's training readiness score and its contributing factors (sleep, recovery time, HRV status, acute load). 3. garmlink_training_status_get to confirm the athlete is productive/peaking rather than overreaching or detraining. 4. garmlink_vo2max_history to check whether VO2max is trending up, flat or down over recent weeks. 5. garmlink_hrv_get for the last 1-2 weeks to confirm autonomic recovery is stable heading into the race. Then synthesize a readiness verdict versus the target race: is the current fitness (VO2max + predictions) enough to hit the goal, and is the athlete recovered enough (readiness + status + HRV) to express it. Flag any red flags (falling VO2max, suppressed HRV, unproductive status) and give a taper/pacing recommendation.
Build a two-week recovery report from sleep, HRV, Body Battery and stress data to reveal whether the athlete is trending toward recovery or accumulating fatigue.
Mostrar flujo
Produce a recovery report covering the last 2 weeks. Call the tools in this order over a 14-day window (from = 14 days ago, to = today): 1. garmlink_sleep_get to gather nightly sleep duration, sleep stages (deep/light/REM) and sleep scores. 2. garmlink_hrv_get to read the overnight HRV trend and whether it sits inside the athlete's balanced range. 3. garmlink_body_battery_get to track daily Body Battery drain and overnight recharge. 4. garmlink_stress_get to see average and peak daytime stress levels. Then synthesize the recovery trend: are sleep, HRV, Body Battery recharge and stress moving in a healthy direction or degrading? Call out the best and worst nights, any multi-day patterns (e.g. poor sleep + low HRV + high stress clustering), and give concrete recovery guidance (sleep hygiene, load reduction, active recovery) for the week ahead.
Deep-dive a single session of any sport: pull its splits and timeseries (HR, speed, power, altitude) to analyse pacing, cardiac drift and split-by-split execution.
Mostrar flujo
Perform a detailed analysis of one specific session — run, ride, swim, row or anything else the athlete recorded. Call the tools in this order: 1. garmlink_session_analysis with the activity id. It returns the DERIVED facts in one round: pace in the sport's own unit, the detected structure (continuous or a set, from the watch's own typed splits when it recorded them), the rest hiding between elapsed and moving time, half-to-half pace and heart-rate drift, time in zone, running mechanics start-to-finish, swim lengths with misdetections flagged, and the athlete's most recent comparable session of the same sport. Trust its arithmetic over your own — it is computed, not estimated. 1b. If you were not given an id, garmlink_activities_list filtered to the sport to find the session first (ask the user which one if it is ambiguous). 2. garmlink_activity_get with that activity id ONLY when you need something the derived facts did not carry — a lap-by-lap table to print, the weather, a field specific to the sport. Whatever you print, read the sport's OWN units: pace per km for running, time per 100 m for swimming, km/h and power for cycling, time per 500 m for rowing. 3. garmlink_activity_timeseries with that id and the metrics the sport records — heart_rate and altitude for everyone, speed for anything that moves over ground, power for cycling, cadence where it exists. 4. garmlink_zones_get to read the athlete's heart-rate zones, so time-in-zone is judged against THEIR thresholds rather than a textbook's. 5. garmlink_stats_summary to place this session against the athlete's recent averages for the same sport. Then synthesize: pacing consistency (went out too fast, negative-split, or faded), cardiac drift (rising HR at steady output = fatigue or heat), output against the altitude profile (climbs vs descents), the split-by-split execution, and where the effort actually sat in the zones. Close with 2-3 actionable takeaways for the next session of this type.
A month of the everyday health signals — resting heart rate, HRV, SpO2, respiration, stress and steps — read together for the drifts no single day shows.
Mostrar flujo
Read the athlete's everyday health signals over the last 30 days (from = 30 days ago, to = today) and report what is DRIFTING, which no single day can show. Call: 1. garmlink_heart_rate_get for the resting heart-rate series — the single most telling everyday marker. 2. garmlink_hrv_get for overnight HRV and its balanced range. 3. garmlink_spo2_get and garmlink_respiration_get for overnight oxygen saturation and breathing rate. 4. garmlink_stress_get for daytime stress, and garmlink_steps_get with garmlink_daily_summary_get for everyday movement. Then synthesize the DIRECTION of each signal over the month, not its average: what is rising, falling or steady, and which ones moved together (a resting HR climbing while HRV falls is one story, not two). Name the days that stand out and say plainly which are explained by training and which are not. Two rules you must not break. Report gaps as gaps: days with no reading mean the watch was not worn, never that the value was zero, and a trend drawn over a fortnight with five missing nights deserves to be called shaky. And stay descriptive — you are reading consumer wearable data, so describe what changed and suggest what to watch or discuss with a clinician; never diagnose, and never interpret a signal as evidence of a condition.
The long view: VO2max trajectory, race predictions, fitness age, endurance and hill scores and personal records, read over months rather than weeks.
Mostrar flujo
Answer the only question that matters over months: is this athlete getting fitter? Call: 1. garmlink_vo2max_history for the VO2max trajectory — the backbone of the answer. 2. garmlink_race_predictions_get to see whether predicted finish times are improving alongside it. 3. garmlink_fitness_age_get, garmlink_endurance_score_get and garmlink_hill_score_get for Garmin's own composite verdicts. 4. garmlink_personal_records_get for what the athlete has actually achieved, not only what a model predicts. 5. garmlink_stats_summary over the same span to relate any change to the training volume that produced it. Then synthesize a verdict with a TIMESCALE attached: improving, plateaued or declining, over what period, and by how much. Tie it to the volume: a flat VO2max on rising volume says something different from a flat one on falling volume. Say when a change is too small to mean anything — these scores move by a point on noise — and finish with the one lever most likely to move the needle next.
Recursos · 4
garmlink://profileThe user's Garmin profile settings snapshot.garmlink://gearThe user's gear (shoes/bikes) with mileage.garmlink://connection-statusGarmin connection + sync status.garmlink://skillCopy-pasteable usage skill for AI assistants: which tool for what, rate limits, interpretation guidance. Read this once per session for best results.