garmin-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GARMIN_EMAIL | No | Your Garmin email address. | |
| GARMIN_PASSWORD | No | Your Garmin 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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_activitiesA | List recorded activities, most recent first. Args: since: Only activities on or after this ISO date (e.g. "2026-03-01"). activity_type: Filter by sport — running, cycling, swimming, transition, multisport. Filtering by sport also reveals the legs inside multisport events, so asking for running includes the run of a triathlon. limit: Maximum activities to return (default 20, capped at 200). until: Only activities before this ISO date. Returns a compact record per activity. Multisport events appear as a single entry unless a sport filter is given. |
| get_activity_detailA | Full detail for one activity: summary, laps, and multisport legs. Args: activity_id: The activity's id, as returned by list_activities. Laps are what make an interval session legible — eight quarter-mile repeats look identical to a steady run in the summary numbers alone. |
| get_activity_streamsA | Time series for one activity — heart rate, pace, altitude and so on. Args: activity_id: The activity's id. fields: Which series to return. Defaults to heart_rate, speed and altitude. Available: heart_rate, speed, altitude, cadence, power, distance, temperature, grade, lat, lon, vertical_oscillation, stance_time, step_length, respiration_rate. max_points: How many points per series (default 200, capped at 2000). Series are averaged into buckets rather than returned raw — a three-hour ride holds around 11 000 samples per channel. Output is columnar: {"heart_rate": [...], "elapsed_s": [...]}. Because the series is smoothed, its own highest and lowest values
understate the real ones. Read peaks from |
| weekly_summaryA | Training totals for one week, broken down by sport. Args: week_start: Any ISO date within the week of interest. Snapped back to the Monday, so "2026-03-18" and "2026-03-16" describe the same week. Defaults to the current week. Multisport events count once, at their combined distance, rather than once per leg. |
| compare_activitiesA | Compare two activities side by side, with the differences computed. Args: id_a: First activity id. id_b: Second activity id. Deltas are calculated here rather than left to the reader, including a plain-language verdict on pace — where a positive number means slower, which is easy to misread. |
| database_statusA | What the database currently holds, and whether it is reachable. Worth calling before concluding that an activity is missing: an empty result may mean nothing has been ingested yet rather than that the session never happened. |
| sync_nowA | Pull new activities from Garmin right now, without leaving the conversation. Args: limit: Maximum activities to download (default: the configured batch size, 25). Requires the ingest worker to be running — it is the only process allowed to write, since DuckDB grants exclusive access to a single writer. If no worker is listening this fails immediately with instructions, rather than appearing to hang. Also imports anything waiting in data/inbox/, which needs neither network nor credentials. |
| create_workoutA | Create a structured workout in the athlete's Garmin library. Args: name: What the session is called, e.g. "Threshold 4x2km". blocks: The session, in order. A block is either a step or a repeat. Step: {"kind": "warmup"|"interval"|"recovery"|"cooldown"|"rest", "duration_s": 1200} or {"distance_m": 2000}, optionally "target_pace": "3:55" and "pace_tolerance_s": 5. Exactly one of duration_s or distance_m per step. Repeat: {"times": 4, "steps": [ ...steps... ]} sport: running, cycling or swimming. description: Optional note attached to the workout. confirm: Must be true to actually create it. Call this without Example blocks for "20 min easy, then 12 x 1 min at 3:45 with 1 min float": [{"kind": "warmup", "duration_s": 1200}, {"times": 12, "steps": [ {"kind": "interval", "duration_s": 60, "target_pace": "3:45"}, {"kind": "recovery", "duration_s": 60}]}, {"kind": "cooldown", "duration_s": 600}] |
| delete_workoutA | Remove a workout from the athlete's Garmin library. Args: workout_id: The id returned by create_workout. confirm: Must be true to actually delete. The undo for create_workout. Same two-step rule: without confirm it reports what would be removed and does nothing. |
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/NoaMatout/garmin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server