Garmin Connect API and MCP server Let your AI agent coach you from Garmin Connect.

Bring Garmin Connect activity records into your agent or private training journal. Use MCP or REST from automation tools and scripts, retaining the original units.

  • Free 7-day trial, no card
  • Unofficial, not affiliated with Garmin
Garmin Connect logo Garmin Connect Cloud Browser

11 tools Read and write

Data to training plan

What can you automate in Garmin Connect? Use an AI agent, a workflow or a script.

  • Check readiness each morning

  • Review last week's runs

  • Build and schedule workouts

  • Export original FIT files

  • Track HRV and sleep trends

  • Read training status and VO2 max

Read-only API

Does Garmin Connect have an MCP server or an API? An API, but it only reads, and no MCP server.

Garmin Connect has an official API but no MCP server (checked 27 Oct 2026). Since 21 Oct 2026 anyone can make a free Personal API key for their own activity and health data, pull only. Workouts and courses go in through business tiers you apply for. Cotlet runs 11 Garmin Connect tools hosted, over MCP for agents and REST for scripts.

  • The Personal key is for your own data. Garmin says it is not meant for commercial apps that serve other people.
  • A key lasts 30 days, 90 days, 180 days or one year, and tokens last 24 hours. Garmin emails you about a week before it expires.
  • Starter and Enterprise are for companies. Starter needs an access request that asks for a business model and any AI services that process the data.
  • Zapier has no Garmin Connect app that we found, and n8n has no Garmin node. Make was not reachable.
Garmin Connect with its Personal API key, an open-source server and Cotlet compared
What you need Personal API keyOpen-source serverCotlet
Read activities and files Yes, with your own code Yes Yes
Read sleep, HRV and Body Battery Health data, metrics not listed Yes Yes
Training status and readiness Not listed Some servers Yes
Build and schedule workouts No, business tiers Some servers Yes, schedule after your OK
No password or key to renew Key expires Password or key Sign in once

Checked 27 Oct 2026. Sources: Garmin Connect Developer Program overview · Garmin Rumors: Personal, Starter and Enterprise · Tredict: Garmin Personal API and AI · Garmin Personal API Python client

Set up once

How does Cotlet connect to Garmin Connect? One account, two ways to connect.

  1. 1Sign in to Garmin Connect

    Use your own account in its Cotlet Cloud Browser.

  2. 2Choose MCP or REST

    Connect your agent or create a Cotlet API key.

  3. 3Run your workflow

    Ask your agent or send an HTTP request.

We never keep your Garmin password, and nothing lands on your training calendar until you approve it. Who can see your session

Any MCP client

Connect Garmin Connect to your agent or workflow

Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.

  1. 1

    Enable Garmin Connect for agents. Sign up, sign in to Garmin Connect in its Cloud Browser, then press Enable for agents.

  2. 2

    Paste the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.

  3. 3

    Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.

The same address serves every app you enable, Garmin Connect with the rest. If you enable Garmin Connect after connecting, refresh the connector so the new tools show up.

Claude
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect

Claude Code:
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
ChatGPT
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth
Cursor
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
    }
  }
}
Codex
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
n8n
MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: garmin_read
Make, Zapier
Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: garmin_write
Scripts and HTTP

How to use the Garmin Connect REST API

Create your Cotlet API key

Create a Cotlet API key with access to Garmin Connect and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.

Sign in to Garmin Connect in its Cotlet Cloud Browser and enable the app for agents. Use your own Garmin Connect login at connect.garmin.com.

Make your first Garmin Connect API request

REST
curl "https://cotlet.dev/api/v1/garmin/activities?limit=2" \
  -H "Authorization: Bearer $COTLET_API_KEY"

Read activities and follow the cursor

A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.

Illustrative response excerpt
{
  "status": "success",
  "app": "garmin",
  "tool": "list_activities",
  "result": {
    "activities": [
      {
        "activity_id": "9000000101",
        "name": "Long Run",
        "type": "running",
        "date": "2026-10-24",
        "distance_km": 21.1,
        "duration_min": 118,
        "avg_heart_rate": 152
      }
    ],
    "next_cursor": null
  }
}

Read result.activities and pass result.next_cursor unchanged as cursor until null. Keep date, activity-type and limit filters fixed.

Activity lists default to 25 records, with a maximum of 100. distance_km uses kilometers and duration_min uses minutes; retain those units in reports.

Device-dependent metrics can be absent. Workout lists accept at most 100 records without a cursor, so do not treat them as an unlimited export.

Garmin Connect workflows for agents and automations

Garmin Connect workflows you configure
ToolConnect throughExample workflow
n8nHTTP RequestCombine activities and activity details into a private distance and duration report with original units.
MakeHTTP > Make a requestRead selected activity IDs and download their files into your chosen personal archive.
Python or Node.jsREST APIRead dated sleep, HRV and Body Battery records into a private metric journal without interpreting absent values.

Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.

Cotlet reads Garmin Connect; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.

Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.

The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.

9 read, 2 write

Garmin Connect API endpoints and MCP tools

Activities and files3

Newest first, filtered by type and date. GPX and TCX are not offered for every activity type, and Garmin exports multisport activities only as FIT.

  • list_activities Activities with type, date, distance, duration and average heart rate. read

    Lists the activities on your Activities page, newest first. Filter by activity type and by date range, then pass an activity_id to get_activity or download_activity. Pages hold up to 100 activities; pass next_cursor back as cursor for the next page.

    MCP callgarmin_read → list_activities

    REST endpointGET https://cotlet.dev/api/v1/garmin/activities

    Parameters

    Parameters: list_activities
    NameTypeDescription
    type string string Activity type as Garmin Connect names it, e.g. running or cycling.
    from date date First day to include.
    to date date Last day to include. Default: today.
    limit integer integer 1 to 100. Default: 25.
    cursor string string Next page cursor from the previous call.

    Example response

    {
      "activities": [
        {
          "activity_id": "9000000101",
          "name": "Long Run",
          "type": "running",
          "date": "2026-10-24",
          "distance_km": 21.1,
          "duration_min": 118,
          "avg_heart_rate": 152
        },
        {
          "activity_id": "9000000087",
          "name": "Tempo Run",
          "type": "running",
          "date": "2026-10-22",
          "distance_km": 12,
          "duration_min": 58,
          "avg_heart_rate": 161
        }
      ],
      "next_cursor": null
    }
  • get_activity One activity with its summary, splits and heart rate zones. read

    Returns one activity as Garmin Connect shows it: totals, lap splits and time in each heart rate zone. Nothing is changed. Fields the device did not record, such as power on a run without a sensor, are left out.

    MCP callgarmin_read → get_activity

    REST endpointGET https://cotlet.dev/api/v1/garmin/activities/{activity_id}

    Parameters

    Parameters: get_activity
    NameTypeDescription
    activity_id string required string Activity ID from list_activities.

    Example input

    {
      "activity_id": "activity_8c41d2"
    }

    Example response

    {
      "activity_id": "9000000101",
      "name": "Long Run",
      "type": "running",
      "date": "2026-10-24",
      "distance_km": 21.1,
      "duration_min": 118,
      "avg_heart_rate": 152,
      "max_heart_rate": 171,
      "splits": [
        {
          "km": 1,
          "pace_min_per_km": "5:35"
        },
        {
          "km": 2,
          "pace_min_per_km": "5:32"
        }
      ]
    }
  • download_activity The activity as its original FIT file, or as GPX or TCX. read

    Exports one activity from the web app and returns a download link to the file. original is the FIT file the device recorded. GPX and TCX are not offered for every activity type, and Garmin exports multisport activities only as FIT. Nothing is changed.

    MCP callgarmin_read → download_activity

    REST endpointGET https://cotlet.dev/api/v1/garmin/activities/{activity_id}/download

    Parameters

    Parameters: download_activity
    NameTypeDescription
    activity_id string required string Activity ID from list_activities.
    format string string original, gpx or tcx. Default: original.

    Example input

    {
      "activity_id": "activity_8c41d2"
    }

    Example response

    {
      "activity_id": "9000000101",
      "format": "original",
      "file_name": "9000000101.zip",
      "download_url": "https://files.cotlet.dev/example/9000000101.zip"
    }

Sleep, HRV and training status4

Read only. HRV status needs about three weeks of sleep data, and training readiness comes back empty on devices that do not calculate it.

  • get_sleep One night of sleep: score, total time and sleep stages. read

    Returns the night that ends on the given date: sleep score, total sleep time and the time in each stage, as Garmin Connect shows it. Empty when the watch was not worn that night. Nothing is changed.

    MCP callgarmin_read → get_sleep

    REST endpointGET https://cotlet.dev/api/v1/garmin/sleep

    Parameters

    Parameters: get_sleep
    NameTypeDescription
    date date date Day to read. Default: today.

    Example response

    {
      "date": "2026-10-26",
      "sleep_score": 82,
      "total_sleep_min": 452,
      "stages_min": {
        "deep": 74,
        "light": 241,
        "rem": 98,
        "awake": 39
      }
    }
  • get_hrv_status Overnight heart rate variability and the HRV status Garmin assigns. read

    Returns the overnight HRV average for the date and the status Garmin shows: Balanced, Unbalanced, Low, Poor or No Status. Garmin needs about three weeks of consistent sleep data before it gives a status, so a new device returns No Status. Nothing is changed.

    MCP callgarmin_read → get_hrv_status

    REST endpointGET https://cotlet.dev/api/v1/garmin/hrv-status

    Parameters

    Parameters: get_hrv_status
    NameTypeDescription
    date date date Day to read. Default: today.

    Example response

    {
      "date": "2026-10-26",
      "overnight_avg_ms": 58,
      "seven_day_avg_ms": 56,
      "status": "Balanced"
    }
  • get_body_battery Body Battery for a day: the morning level, the day's high and low, and what drained it. read

    Returns the Body Battery levels Garmin Connect charts for the day, on its scale of 5 to 100: the level at waking, the highest and the lowest. Sleep charges it and activity and stress drain it. Nothing is changed.

    MCP callgarmin_read → get_body_battery

    REST endpointGET https://cotlet.dev/api/v1/garmin/body-battery

    Parameters

    Parameters: get_body_battery
    NameTypeDescription
    date date date Day to read. Default: today.

    Example response

    {
      "date": "2026-10-26",
      "at_wake": 78,
      "highest": 82,
      "lowest": 24,
      "charged": 61,
      "drained": 58
    }
  • get_training_status Training status, training readiness and VO2 max as Garmin Connect shows them. read

    Returns the training status label, the training readiness score and VO2 max for the date. Garmin calculates readiness from sleep score, recovery time, HRV status, acute load and sleep and stress history. Only devices that support these metrics fill them; the rest come back empty.

    MCP callgarmin_read → get_training_status

    REST endpointGET https://cotlet.dev/api/v1/garmin/training-status

    Parameters

    Parameters: get_training_status
    NameTypeDescription
    date date date Day to read. Default: today.

    Example response

    {
      "date": "2026-10-26",
      "training_status": "Productive",
      "training_readiness": 71,
      "vo2_max": 52
    }

Workouts and training calendar4

A new workout sits in your library until you schedule it. Scheduling changes what your calendar, and later your watch, shows.

  • list_workouts Workouts in your library, with name, sport and number of steps. read

    Lists the workouts under Training & Planning > Workouts, newest first. Pass a workout_id to schedule_workout. Nothing is changed.

    MCP callgarmin_read → list_workouts

    REST endpointGET https://cotlet.dev/api/v1/garmin/workouts

    Parameters

    Parameters: list_workouts
    NameTypeDescription
    sport string string Filter by sport, e.g. running or cycling.
    limit integer integer 1 to 100. Default: 50.

    Example response

    {
      "workouts": [
        {
          "workout_id": "wk_3301",
          "name": "Tempo 3 x 10 min",
          "sport": "running",
          "steps": 9
        },
        {
          "workout_id": "wk_3290",
          "name": "Easy 40 min",
          "sport": "running",
          "steps": 1
        }
      ]
    }
  • get_training_calendar Scheduled workouts and activities on your calendar in a date range. read

    Returns what your Garmin Connect training calendar holds between two dates: scheduled workouts, training plan sessions and finished activities, earliest first. Without dates it covers the next 7 days. Nothing is changed.

    MCP callgarmin_read → get_training_calendar

    REST endpointGET https://cotlet.dev/api/v1/garmin/training-calendar

    Parameters

    Parameters: get_training_calendar
    NameTypeDescription
    from date date Start of the range. Default: today.
    to date date End of the range. Default: 7 days after from.

    Example response

    {
      "days": [
        {
          "date": "2026-10-29",
          "scheduled": [
            {
              "workout_id": "wk_3301",
              "name": "Tempo 3 x 10 min"
            }
          ],
          "activities": []
        },
        {
          "date": "2026-10-31",
          "scheduled": [],
          "activities": []
        }
      ]
    }
  • create_workout New workout in your library from a list of steps. It is not scheduled or sent anywhere. write

    Builds a workout under Training & Planning > Workouts > Create a Workout and returns its workout_id. Each step has a type such as warm up, run, recover or cool down, a duration or distance and an optional target. The workout stays in your library until schedule_workout puts it on a date. It reaches no one and you can delete it in Garmin Connect, so it runs without asking.

    MCP callgarmin_write → create_workout

    REST endpointPOST https://cotlet.dev/api/v1/garmin/workouts

    Parameters

    Parameters: create_workout
    NameTypeDescription
    name string required string Workout name, e.g. "Tempo 3 x 10 min".
    sport string required string Sport as Garmin Connect names it, e.g. running or cycling.
    steps object required object List of { type, duration_min or distance_km, target }. type: warm up, run, recover, cool down or repeat.

    Example input

    {
      "name": "Tempo 3 x 10 min",
      "sport": "sport",
      "steps": "steps"
    }

    Example response

    {
      "workout_id": "wk_3301",
      "name": "Tempo 3 x 10 min",
      "sport": "running",
      "steps": 9
    }
  • schedule_workout Put a workout from your library on a date in your training calendar. writeasks first

    Adds the workout to your Garmin Connect training calendar on the date you give and returns the calendar entry. Garmin's manuals say scheduled workouts in Connect can be sent to your device and overwrite the training calendar already on it, so this changes what your watch shows after its next sync. By default you confirm each call; you can switch that off for this tool.

    MCP callgarmin_write → schedule_workout

    REST endpointPOST https://cotlet.dev/api/v1/garmin/workouts/{workout_id}/schedule

    Parameters

    Parameters: schedule_workout
    NameTypeDescription
    workout_id string required string Workout ID from list_workouts or create_workout.
    date date required date Day to schedule it on.

    Example input

    {
      "workout_id": "wk_3301",
      "date": "2026-10-29"
    }

    Example response

    {
      "workout_id": "wk_3301",
      "date": "2026-10-29",
      "status": "scheduled",
      "name": "Tempo 3 x 10 min"
    }
Encrypted, revocable

Who can see my Garmin Connect session, and how do I revoke it?

  • What we store

    Your signed-in Garmin Connect profile, encrypted with AES-256-GCM, in Finland. Not the password.

  • What your agent gets

    The 11 Garmin Connect tools. Never the cookie or your password.

  • What the session sees

    Your account: activities, sleep and health stats, workouts, calendar.

  • What no tool touches

    Password, two-factor, subscription, devices, sharing and deleting.

  • If Garmin asks to verify

    A sign-in code or challenge goes to you. You type it in, we never do.

  • How to cut access

    Disable for agents, reset the browser, or sign out of Garmin Connect.

Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.

Account risk

Is it against Garmin's terms? Account safety Garmin blocks scripts technically; no ban case found.

"Licensees may not use the API to design a client or application that uses any robot, spider, site search, or other retrieval application or device to scrape, retrieve, or index services provided by Garmin or its licensors."
Garmin Connect Developer Program Agreement, restrictions

That clause binds developers who sign the API agreement, and Cotlet does not use the API. We could not open Garmin's consumer terms of use, so we quote nothing from them (checked 27 Oct 2026). Garmin could still read an agent in your account as automation. In 2026 Garmin put Cloudflare TLS fingerprinting in front of its Connect API, which blocks scripts that are not a real browser. We found no public case of a Garmin account closed for using a third-party tool, only temporary rate limits.

How we keep your account looking like you

  • Your own Garmin account, signed in by you
  • A real Chrome in one Cloud Browser with its own IP and cookies
  • Workouts reach your calendar only after your OK
  • No tool deletes an activity or a workout
  • If Garmin objects, we pause the Garmin tools for everyone within 24 h

Garmin limits repeated sign-ins from one account. Sign in once and let the Cloud Browser keep the session instead of logging in on every run.

Tested every 12 h

What happens when Garmin Connect changes? We repair the tool; your prompts stay the same.

between tests of the Garmin Connect reads
12 h
for a call to a Garmin Connect tool paused for repair
$0

Garmin changed its sign-in this year and broke several open-source servers. When Garmin Connect moves a button or renames a field, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.

1 tool asks first

Approvals, undo and mistakes Your calendar changes only when you say so.

  1. 01 Reads your state Sleep, HRV, Body Battery and the calendar for the week.
  2. 02 Builds the workouts Steps, durations and targets saved to your library.
  3. 03 Waits for your OK The schedule shows up in your Cotlet console first.
  4. 04 Reports the plan Each workout, its date and what it replaced.
Which Garmin Connect actions can be undone
ActionUndo
Create a workoutDelete it in Garmin Connect, it reaches no one
Schedule a workoutRemove it from the calendar in Garmin Connect
Workout already on the watchGarmin sends the calendar to the device and overwrites the one there, so check it before you OK
Download a fileNothing changes in your account

1 of 11 tools asks first: schedule_workout, the one that changes your training calendar. Reads, downloads and new library workouts reach nothing, so they run at once. Switch the wait off per tool for a scheduled run.

Garmin's manuals say scheduled workouts sent to a device overwrite the training calendar already on it. Look at get_training_calendar before you approve a new week.

MCP call
{
  "name": "schedule_workout",
  "arguments": {
    "workout_id": "wk_3301",
    "date": "2026-10-29"
  }
}
REST
curl -X POST https://cotlet.dev/api/v1/garmin/workouts/wk_3301/schedule \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"date":"2026-10-29"}'
Tool output
{
  "workout_id": "wk_3301",
  "date": "2026-10-29",
  "status": "scheduled",
  "name": "Tempo 3 x 10 min"
}

Scripts and cron jobs reach the same tools over REST at /api/v1/garmin, with the same key and price. A device that does not record a metric returns it empty, and a failed call costs nothing. The tools table lists the REST path of each tool.

Pay per call

How much does the Garmin Connect MCP server cost?

About $21 a monthfor a daily readiness check plus weekly review, planning and exports, 3,680 credits. Garmin Connect stays free, or Connect+ at Garmin's own price.

A month of Garmin Connect jobs for one athlete, in credits
JobCallsCredits
Morning readiness check5 × 301,500
Review the week's runs, weekly5 × 4200
Build and schedule a training week7 × 4280
Export files for a coach, weekly5 × 4200
Cloud Browser, 30 days1,500
Total3,680
  • Free 7-day trial, no card
  • 10 credits per successful call, MCP or REST
  • 50 credits a day for the Cloud Browser
  • Works on the free Garmin Connect account

The month is our example: a morning check every day and a weekly review, plan and export. We found no public figure for how an athlete uses an agent on Garmin Connect. Garmin Connect+ costs $6.99 a month or $69.99 a year in the US (checked 27 Oct 2026) and is billed by Garmin. Dollars at the $29 pack rate.

Cotlet credit packs: price, credits and calls at 10 credits each
Credits Price, one time Calls at 10 credits Per 1,000 credits
5,000 $29 500 $5.80
15,000 $79 1,500 $5.27
32,000 $149 3,200 $4.66
60,000 $249 6,000 $4.15

Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.

Other options

Garmin Connect MCP server on GitHub or hosted: which to use Open-source servers exist; they run on your computer.

Other Garmin Connect MCP servers and tools, checked 27 Oct 2026
OptionWhat it doesWhere it stops
Taxuspt/garmin_mcpMCP server with activities, health, workouts, calendar and device tools, in tool profiles from 20 to all. Python, MIT.1,416 stars, last commit 24 Oct 2026. Signs in with your Garmin email and password through an unofficial library; Garmin's login changes have broken that route before.
Nicolasvegam/garmin-connect-mcp61 tools over seven categories, Node.js.185 stars, last commit 28 Jul 2026. Takes your email and password in the environment.
etweisberg/garmin-connect-mcpRoutes calls through a headless Playwright browser to get past Garmin's TLS fingerprinting, with workouts and devices.45 stars, last commit 12 Jul 2026. You log in by hand in a Playwright browser and keep it running; AGPL-3.0.
Mason-Levyy/garmin-personal-mcp26 read-only tools on the official Personal API, no password. Python, MIT.39 stars, last commit 25 Oct 2026. Reads only, and you renew the key every 30 days to a year.
TredictTraining platform on Garmin's official business API, with an MCP server and a ChatGPT plugin. Sends workouts to the watch.You move your training log into Tredict. It works from its own data, not your Garmin account.

A GitHub server is free and quick to start if you are comfortable with a terminal and a stored password or key. It runs on your computer and stops when Garmin changes its login. The Personal API route is clean but read-only. Cotlet keeps your Garmin account as the source of truth, hosts the server, adds the workout tools and repairs it when Garmin changes.

EU company, since 2019

Who runs Cotlet A company you can look up.

Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Garmin Connect tools.

Garmin Connect API and MCP: questions

Can I use the Garmin Connect API without an AI agent?

Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.

How do I get access?

Create a free account at https://cotlet.dev, open Garmin Connect under Integrations in the console and sign in to Garmin Connect in its Cloud Browser. The trial starts with your first app, no card asked.

Why not use Garmin's free Personal API key?

For reading your own activity and health data, you can (checked 27 Oct 2026). The key is read-only, pull only and expires after 30 days to a year, and you need your own code or an open-source server to use it. Cotlet is for what the key does not do: building and scheduling workouts, and training status, in a hosted server.

Does a scheduled workout reach my watch?

Scheduling puts the workout on your Garmin Connect training calendar. Garmin's manuals say workouts sent from Connect to the device overwrite the training calendar already on it, so check the calendar before you confirm.

Do I need Garmin Connect+?

No for the tools here. Cotlet works in your account on the plan you have. Features Garmin sells with Connect+, such as nutrition tracking, need that subscription in Garmin first (checked 27 Oct 2026).

Does Garmin Connect have webhooks?

Only for approved businesses. Starter and Enterprise push data to an app's server, while the Personal tier is pull only (checked 27 Oct 2026). Run your agent on a schedule instead, for example a daily get_sleep and get_training_status pass.

Does it work with any Garmin watch?

Cotlet reads what Garmin Connect shows for your account. A device that does not record a metric, such as HRV status or training readiness, returns it empty.

Can the agent see my Garmin password?

No. We keep the signed-in session, never the password, and no tool returns the cookie.

Is the MCP server different from the REST API?

Only the way in. Both have the same 11 tools, inputs and answers, one API key and one price. Agents use MCP; scripts, cron jobs and HTTP steps use REST.

Is Cotlet affiliated with Garmin?

No. Cotlet is independent and not affiliated with Garmin Ltd.

Give your agent access to Garmin Connect.

Free 7-day trial with 2,000 credits, no card needed.