Garmin (MissingMCP.com)

Your watch has the answers.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • Get Activities By Date: Get activities between specified dates with pagination support. For accounts with large activity histories, broad date ranges can return thousands of activities in a single res
  • Get Activities Fordate: Get activities for a specific date Args: date: Date in YYYY-MM-DD format
  • Get Activity: Get detailed information for a single activity. Returns a comprehensive summary including timing, distance, heart rate, elevation, training effect, and an event_type field. Common event_

What data it sees

Do you need an account

No: the server works without sign-in

Your watch has the answers. Everything your watch knows — training, sleep, recovery, health — in a conversation. Ask questions, spot trends, and let Claude plan workouts that land right back on your wrist. 135 tools for activities, sleep, HRV, training readiness and workouts. Free, open source.

How to connect

How to connect Garmin (MissingMCP.com) to Claude

The server address to paste into Claude settings:

https://garmin-missing-mcp.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect Garmin (MissingMCP.com) to ChatGPT

The server address to paste into ChatGPT settings:

https://garmin-missing-mcp.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect Garmin (MissingMCP.com) to Cursor

The server address to paste into Cursor settings:

https://garmin-missing-mcp.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (60)

Raw names from tools/list. Only developers need these.

get_activities_by_dateGet activities between specified dates with pagination support. For accounts with large activity histories, broad date ranges can return thousands of activities in a single response. Use page and page_size to retrieve activities in manageable chunks and avoid "result too large" errors. Activities are ordered newest-first. Pagination: when has_more is true the response includes next_page — pass that value as page on the next call to retrieve the following page. Repeat until has_more is false. Note: total_count for a date range is not available from the Garmin API without fetching all results. Use has_more / next_page to walk pages. Each activity includes an event_type field with values such as: - "race" — explicitly tagged as a race by the user - "training" — explicitly tagged as a training activity - "uncategorized" — no event type set; common for Peloton imports and untagged outdoor runs. Distinct from "training": filter for races with event_type == "race" rather than excluding "training", since many non-race activities appear as "uncategorized" not "training" - field omitted — activity pre-dates event type support in the API Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format activity_type: Optional activity type filter (e.g., cycling, running, swimming) page: Zero-based page number (default 0) page_size: Number of activities per page, max 200 (default 100)
get_activities_fordateGet activities for a specific date Args: date: Date in YYYY-MM-DD format
get_activityGet detailed information for a single activity. Returns a comprehensive summary including timing, distance, heart rate, elevation, training effect, and an event_type field. Common event_type values: "race", "training", "uncategorized" (no event type set by the user). The field is omitted for very old activities that pre-date event type support in the Garmin API. Args: activity_id: ID of the activity to retrieve
set_activity_nameSet or update the name of an activity. Args: activity_id: ID of the activity to update activity_name: New activity name
set_activity_typeChange the activity type (sport) of an activity. Useful for reclassifying a mislabelled activity, e.g. flipping a run logged as 'trail_running' to 'running', or a 'treadmill_running' walk to 'treadmill_walking'. Call get_activity_types to see all valid type keys. Args: activity_id: ID of the activity to update type_key: Target activity type key (e.g. 'running', 'trail_running', 'treadmill_running', 'cycling', 'lap_swimming')
set_activity_descriptionSet or update the free-text description (notes) of an activity. This is the notes field shown on the activity page — useful for recording how a session felt, kit used, conditions, niggles, etc. Pass an empty string to clear an existing description. Args: activity_id: ID of the activity to update description: New description text (empty string clears it)
set_activity_event_typeSet the event type of an activity. Event type categorises the activity's purpose. Valid keys: race, recreation, specialEvent, training, transportation, touring, geocaching, fitness, uncategorized. Args: activity_id: ID of the activity to update event_type: Target event type key (e.g. 'race', 'training')
set_perceived_effortSet the perceived effort (RPE) for an activity. Mirrors Garmin Connect's 'Perceived Effort' rating on a 0-10 scale, where 0 clears the rating. Internally Garmin stores this multiplied by 10 (so RPE 7 is stored as 70); this tool handles the conversion. Args: activity_id: ID of the activity to update rpe: Perceived effort from 0 to 10 (0 clears the rating)
set_activity_feelSet how an activity felt ('How did you feel?'). Mirrors Garmin Connect's 5-point feel rating, stored as one of: 0 = very tired / poor 25 = tired 50 = normal 75 = good 100 = strong Higher is better. Args: activity_id: ID of the activity to update feel: One of 0, 25, 50, 75, 100
get_activity_splitsGet splits for an activity Args: activity_id: ID of the activity to retrieve splits for
get_activity_typed_splitsGet typed splits for an activity Args: activity_id: ID of the activity to retrieve typed splits for
get_activity_split_summariesGet split summaries for an activity Args: activity_id: ID of the activity to retrieve split summaries for
get_activity_weatherGet weather data for an activity Args: activity_id: ID of the activity to retrieve weather data for
get_activity_hr_in_timezonesGet heart rate data in different time zones for an activity Args: activity_id: ID of the activity to retrieve heart rate time zone data for
get_activity_power_in_timezonesGet power distribution across training zones for an activity. Returns time spent in each power zone with watt thresholds and duration. Requires a power meter. Zones are based on the athlete's FTP configured in Garmin Connect. Args: activity_id: ID of the activity to retrieve power zone data for
get_activity_gearGet gear data used for an activity Args: activity_id: ID of the activity to retrieve gear data for
get_activity_exercise_setsGet exercise sets for strength training activities Args: activity_id: ID of the activity to retrieve exercise sets for
count_activitiesGet total count of activities in the user's Garmin account Returns the total number of activities recorded.
get_activitiesGet activities with pagination support. Retrieves a paginated list of activities ordered newest-first. Use this for browsing through large activity lists when you do not need to filter by date range, or as a complement to get_activities_by_date. Each activity includes an event_type field. Common values: "race", "training", "uncategorized" (no event type set by the user — common for Peloton imports and untagged runs). Filter for races with event_type == "race" rather than excluding "training", as many non-race activities appear as "uncategorized" rather than "training". Args: start: Starting index (default 0) limit: Maximum number of activities to return (default 20, max 100)
create_manual_activityLog a manual activity in Garmin Connect — useful for activities done without a watch. The type_key must match a Garmin activity type. Use get_activity_types to see the full list. Common values: yoga, strength_training, meditation, indoor_cycling, pilates, bouldering, fitness_equipment. Args: type_key: Activity type key (e.g. "yoga", "strength_training") date: Date of the activity in YYYY-MM-DD format duration_minutes: Duration of the activity in minutes start_time: Start time as HH:MM (24-hour, default 09:00) activity_name: Optional title; defaults to the type_key if not provided distance_km: Distance in kilometres (default 0.0 for non-distance activities) time_zone: IANA time zone for the activity (default UTC)
get_activity_typesGet all available activity types Returns a list of all activity types supported by Garmin Connect, useful for filtering activities by type.
get_statsGet daily activity stats with curated essential metrics Returns a summary of daily health and activity data including steps, calories, heart rate, stress, body battery, and sleep metrics. Args: date: Date in YYYY-MM-DD format
get_user_summaryGet user summary data (compatible with garminconnect-ha) Args: date: Date in YYYY-MM-DD format
get_body_compositionGet body composition data for a single date or date range Args: start_date: Date in YYYY-MM-DD format or start date if end_date provided end_date: Optional end date in YYYY-MM-DD format for date range
get_stats_and_bodyGet stats and body composition data Args: date: Date in YYYY-MM-DD format
get_steps_dataGet detailed steps data with 15-minute intervals Note: This returns full interval data (~14KB). For a compact summary, use get_stats() which includes total_steps. Args: date: Date in YYYY-MM-DD format
get_daily_stepsGet steps data for a date range Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format
get_training_readinessGet training readiness data with curated metrics Returns training readiness score and contributing factors. Args: date: Date in YYYY-MM-DD format
get_body_batteryGet body battery data with events Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format
get_body_battery_eventsGet body battery events data Args: date: Date in YYYY-MM-DD format
get_blood_pressureGet blood pressure data Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format
get_floorsGet floors climbed data Args: date: Date in YYYY-MM-DD format
get_rhr_dayGet resting heart rate data Args: date: Date in YYYY-MM-DD format
get_heart_ratesGet full heart rate time-series data Note: This returns detailed 2-minute interval data (~25KB). For a compact summary, use get_heart_rates_summary(). Args: date: Date in YYYY-MM-DD format
get_heart_rates_summaryGet heart rate summary with essential metrics (lightweight version) Returns a compact summary (~500 bytes) instead of full time-series data (~25KB). Ideal for daily health checkups and LLM integrations. Args: date: Date in YYYY-MM-DD format
get_hydration_dataGet hydration data Args: date: Date in YYYY-MM-DD format
get_sleep_dataGet full sleep data with all details Note: This returns detailed sleep data (~50KB). For a compact summary, use get_sleep_summary(). Args: date: Date in YYYY-MM-DD format
get_sleep_summaryGet sleep summary with only essential metrics (lightweight version) This endpoint returns a compact summary of sleep data (~350 bytes) instead of the full granular data (~50KB). Ideal for daily health checkups and LLM integrations where the full time-series data would overwhelm the context window. Args: date: Date in YYYY-MM-DD format
get_stress_dataGet full stress time-series data Note: This returns detailed interval data (~35KB) including body battery. For a compact summary, use get_stress_summary(). Args: date: Date in YYYY-MM-DD format
get_stress_summaryGet stress summary with essential metrics (lightweight version) Returns a compact summary (~400 bytes) instead of full time-series data (~35KB). Ideal for daily health checkups and LLM integrations. Args: date: Date in YYYY-MM-DD format
get_respiration_dataGet full respiration time-series data Note: This returns detailed interval data (~20KB). For a compact summary, use get_respiration_summary(). Args: date: Date in YYYY-MM-DD format
get_respiration_summaryGet respiration summary with essential metrics (lightweight version) Returns a compact summary (~300 bytes) instead of full time-series data (~20KB). Args: date: Date in YYYY-MM-DD format
get_spo2_dataGet SpO2 (blood oxygen) data Args: date: Date in YYYY-MM-DD format
get_all_day_stressGet all-day stress data Args: date: Date in YYYY-MM-DD format
get_all_day_eventsGet daily wellness events data Args: date: Date in YYYY-MM-DD format
get_lifestyle_logging_dataGet lifestyle logging data for a specific date Returns lifestyle logging data which allows users to track behaviors and their impact on health metrics. Args: date: Date in YYYY-MM-DD format
get_weekly_stepsGet weekly step data aggregates Returns weekly step totals for the specified number of weeks ending at end_date. Args: end_date: End date in YYYY-MM-DD format weeks: Number of weeks to fetch (default 4, max 52)
get_weekly_stressGet weekly stress data aggregates Returns weekly stress values for the specified number of weeks ending at end_date. Args: end_date: End date in YYYY-MM-DD format weeks: Number of weeks to fetch (default 4, max 52)
get_weekly_intensity_minutesGet weekly intensity minutes data aggregates Returns weekly intensity minutes (moderate and vigorous) for the specified number of weeks ending at end_date. Args: end_date: End date in YYYY-MM-DD format weeks: Number of weeks to fetch (default 4, max 52)
get_morning_training_readinessGet morning training readiness score Returns the morning training readiness assessment, which evaluates recovery status and readiness to train based on overnight metrics. Args: date: Date in YYYY-MM-DD format
get_full_nameGet user's full name from profile
get_unit_systemGet user's preferred unit system from profile
get_user_profileGet user profile information
get_userprofile_settingsGet user profile settings
get_devicesGet all Garmin devices associated with the user account
get_device_last_usedGet information about the last used Garmin device
get_device_settingsGet settings for a specific Garmin device Returns device configuration including time/date format, units, activity tracking settings, and alarm information. Args: device_id: Device ID (optional; defaults to the most recently used device when omitted; can be obtained from get_devices or get_device_last_used)
get_primary_training_deviceGet information about the primary training device Returns details about the device designated as primary for training metrics, along with other wearable devices on the account.
get_device_solar_dataGet solar data for a specific device Returns solar charging data for devices with solar panels (e.g., Instinct Solar, Fenix Solar). Only applicable to solar-capable devices. Args: device_id: Device ID (can be obtained from get_devices) date: Date in YYYY-MM-DD format
get_device_alarmsGet alarms from all Garmin devices Returns all configured alarms with their schedules, sounds, and enabled status.