Health & fitness
Trainerize
Clients, programs, check-ins and messages for your Trainerize business.
14 endpoints
Your agent reads your TrainingPeaks calendar, plans workouts and checks fitness, fatigue and form. Coaches can also apply a Training Plan to a group. It runs in the ChatGPT and Claude apps, with no API key and no server to host.
14 tools Read and write
TrainingPeaks has no official MCP server. Its Partner API goes to approved commercial partners, and its request page says no new partners are accepted for now (checked 6 Nov 2026). Cotlet runs 14 TrainingPeaks tools hosted, over MCP for agents and REST for scripts, with no TrainingPeaks API key.
| What you need | Partner API | Cotlet |
|---|---|---|
| Open to one athlete or coach | Approved partners only | Yes, sign in once |
| Read planned and completed workouts | For partners | Yes |
| Add or move a planned workout | For partners | Yes, after your OK |
| Log metrics | For partners | Yes, after your OK |
| Fitness, fatigue and form | No endpoint | Yes |
| Copy from the Workout Library | No endpoint | Yes, after your OK |
| Apply a Training Plan | No endpoint | Yes, after your OK |
Checked 6 Nov 2026. Sources: TrainingPeaks: An Update on TrainingPeaks Partner API · TrainingPeaks: Request API Access · Partners API wiki: endpoints · Partners API wiki: FAQ
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your TrainingPeaks password, and workouts, plans and comments wait for your OK before an athlete sees them. Who can see your session
Three steps. The same address works in Claude, ChatGPT, editors, n8n, Make and Zapier.
Enable TrainingPeaks. Sign up, log in to TrainingPeaks in its Cloud Browser and turn it on for agents.
Add the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Sign in or use a key. Chat apps sign you in to Cotlet; editors and scripts take an API key from the console.
One address covers TrainingPeaks and every other app you enable. Turned TrainingPeaks on after connecting? Refresh the connector so the tools show up.
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" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: trainingpeaks_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: trainingpeaks_write Without athlete_id a tool works on your own calendar. A skipped workout has no completed values, and compliance is the colour TrainingPeaks shows.
Returns every workout on the calendar between start_date and end_date, oldest day first. Each workout shows its planned values next to its completed values, so a skipped workout has no completed values. compliance is the colour TrainingPeaks shows: green, yellow, orange, red (not completed) or grey (unplanned). Without athlete_id it reads your own calendar.
MCP calltrainingpeaks_read → list_calendar_workouts
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/calendar-workouts
| Name | Type | Description |
|---|---|---|
| start_date date required | date | First day to read. |
| end_date date required | date | Last day to read. |
| athlete_id string | string | Athlete from list_athletes. Default: your own calendar. |
{
"start_date": "2026-10-01",
"end_date": "2026-10-01"
} {
"workouts": [
{
"workout_id": "wk_88121",
"date": "2026-11-02",
"title": "Easy run",
"sport": "Run",
"planned": {
"duration_minutes": 45,
"tss": 38
},
"completed": {
"duration_minutes": 47,
"tss": 40
},
"compliance": "green"
},
{
"workout_id": "wk_88124",
"date": "2026-11-04",
"title": "Threshold intervals",
"sport": "Bike",
"planned": {
"duration_minutes": 75,
"tss": 85
},
"completed": null,
"compliance": "red"
}
]
} Returns the workout's description, planned and completed values and the pre and post activity comments. The structured intervals are included for workouts built in the Workout Builder. Use workout_id from list_calendar_workouts.
MCP calltrainingpeaks_read → get_workout
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/workouts/{workout_id}
| Name | Type | Description |
|---|---|---|
| workout_id string required | string | Workout from list_calendar_workouts. |
{
"workout_id": "workout_8c41d2"
} {
"workout_id": "wk_88121",
"date": "2026-11-02",
"title": "Easy run",
"sport": "Run",
"description": "Keep it conversational.",
"planned": {
"duration_minutes": 45,
"tss": 38
},
"completed": {
"duration_minutes": 47,
"tss": 40
},
"comments": [
{
"author": "Lena Ford",
"text": "Legs felt heavy at first."
}
]
} Returns events and goals from today on, soonest first, with the priority set in TrainingPeaks. The A priority event is the one automatic periodization uses. Without athlete_id it reads your own calendar.
MCP calltrainingpeaks_read → list_events
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/events
| Name | Type | Description |
|---|---|---|
| athlete_id string | string | Athlete from list_athletes. Default: your own calendar. |
{
"events": [
{
"name": "City Half Marathon",
"date": "2027-03-14",
"priority": "A"
},
{
"name": "Spring 10K",
"date": "2027-02-07",
"priority": "B"
}
]
} Creates a planned workout on the given day with the values you pass. It appears on the calendar like one added with the plus icon. On an athlete's calendar the athlete sees it, which is why the call is confirmed. By default you confirm each call; you can switch that off for this tool.
MCP calltrainingpeaks_write → add_workout
REST endpointPOST https://cotlet.dev/api/v1/trainingpeaks/workouts
| Name | Type | Description |
|---|---|---|
| date date required | date | Calendar day. |
| title string required | string | Workout name. |
| sport string required | string | Sport as TrainingPeaks lists it, e.g. Run or Bike. |
| description string | string | Text shown in the workout description. |
| planned_duration_minutes integer | integer | Planned duration in minutes. |
| planned_tss number | number | Planned TSS. |
| athlete_id string | string | Athlete from list_athletes. Default: your own calendar. |
{
"date": "2026-11-11",
"title": "Threshold intervals",
"sport": "Bike",
"description": "Warm up, then intervals at threshold.",
"planned_duration_minutes": 75,
"planned_tss": 85
} {
"workout_id": "wk_88131",
"date": "2026-11-11",
"title": "Threshold intervals",
"sport": "Bike",
"planned": {
"duration_minutes": 75,
"tss": 85
},
"status": "planned"
} Moves one workout to the new day and keeps its planned and completed values. On an athlete's calendar the athlete sees the change, which is why the call is confirmed. By default you confirm each call; you can switch that off for this tool.
MCP calltrainingpeaks_write → move_workout
REST endpointPOST https://cotlet.dev/api/v1/trainingpeaks/workouts/{workout_id}/move
| Name | Type | Description |
|---|---|---|
| workout_id string required | string | Workout from list_calendar_workouts. |
| date date required | date | New calendar day. |
{
"workout_id": "workout_8c41d2",
"date": "2026-10-01"
} {
"workout_id": "wk_88124",
"date": "2026-11-05",
"title": "Threshold intervals",
"status": "planned"
} Adds a comment to the workout that the athlete and the coach can both read. Comments cannot be edited by this tool. By default you confirm each call; you can switch that off for this tool.
MCP calltrainingpeaks_write → comment_on_workout
REST endpointPOST https://cotlet.dev/api/v1/trainingpeaks/workouts/{workout_id}/replies
| Name | Type | Description |
|---|---|---|
| workout_id string required | string | Workout from list_calendar_workouts. |
| text string required | string | Comment text. |
{
"workout_id": "workout_8c41d2",
"text": "text"
} {
"workout_id": "wk_88121",
"comment_id": "cm_5012",
"text": "Good pacing. Keep Thursday easy.",
"status": "posted"
} The library copy stays in place when you schedule from it. Training Plans are for coach accounts.
Returns each library with its workouts, in the order TrainingPeaks shows them. Use library_workout_id in add_workout_from_library. A Basic athlete account holds 5 workouts in its Library; Premium holds more.
MCP calltrainingpeaks_read → list_workout_library
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/workout-libraries
| Name | Type | Description |
|---|---|---|
| library string | string | Only this library name. |
{
"libraries": [
{
"library": "Base block",
"workouts": [
{
"library_workout_id": "lib_301",
"title": "Easy run",
"sport": "Run"
},
{
"library_workout_id": "lib_302",
"title": "Long run",
"sport": "Run"
}
]
}
]
} Copies the library workout to the day, like dragging it from the Library to the calendar. The library keeps its own copy. On an athlete's calendar the athlete sees it, which is why the call is confirmed. By default you confirm each call; you can switch that off for this tool.
MCP calltrainingpeaks_write → add_workout_from_library
REST endpointPOST https://cotlet.dev/api/v1/trainingpeaks/library-workouts/{library_workout_id}/workout-from-libraries
| Name | Type | Description |
|---|---|---|
| library_workout_id string required | string | Workout from list_workout_library. |
| date date required | date | Calendar day. |
| athlete_id string | string | Athlete from list_athletes. Default: your own calendar. |
{
"library_workout_id": "library_workout_8c41d2",
"date": "2026-10-01"
} {
"workout_id": "wk_88140",
"date": "2026-11-10",
"title": "Easy run",
"sport": "Run",
"status": "planned"
} Returns the Training Plans you created, each a multi-week block of training. Use plan_id in apply_training_plan. An athlete account gets a permission error.
MCP calltrainingpeaks_read → list_training_plans
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/training-plans
No parameters.
{
"plans": [
{
"plan_id": "plan_77",
"name": "10K build",
"weeks": 8
},
{
"plan_id": "plan_81",
"name": "Base block",
"weeks": 4
}
]
} Applies the plan to every athlete in athlete_ids. You give a start_date, or an end_date to count back from, the same choice TrainingPeaks offers when you click apply. The plan's workouts land on each athlete's calendar. Coach accounts only. By default you confirm each call; you can switch that off for this tool.
MCP calltrainingpeaks_write → apply_training_plan
REST endpointPOST https://cotlet.dev/api/v1/trainingpeaks/plans/{plan_id}/training-plan/apply
| Name | Type | Description |
|---|---|---|
| plan_id string required | string | Plan from list_training_plans. |
| athlete_ids array required | array | Athletes from list_athletes. |
| start_date date | date | First day of the plan. Give this or end_date. |
| end_date date | date | Last day of the plan. Give this or start_date. |
{
"plan_id": "plan_8c41d2",
"athlete_ids": "athlete ids"
} {
"plan_id": "plan_77",
"applied_to": [
"ath_20418",
"ath_20433"
],
"start_date": "2026-12-01",
"status": "applied"
} Coach accounts only. An athlete account has no Athlete Library and gets a permission error.
Returns the athletes in the coach's Athlete Library with the group each one is in. Use athlete_id as the athlete parameter of the other tools. An athlete account has no Athlete Library and gets a permission error.
MCP calltrainingpeaks_read → list_athletes
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/athletes
| Name | Type | Description |
|---|---|---|
| group string | string | Only athletes in this group name. |
{
"athletes": [
{
"athlete_id": "ath_20418",
"name": "Lena Ford",
"group": "10K group"
},
{
"athlete_id": "ath_20433",
"name": "Marco Reyes",
"group": "10K group"
}
]
} Fitness numbers follow the CTL and ATL start values set on the Dashboard chart, so they can differ from the Home view.
Returns the metric entries on the calendar between start_date and end_date, newest first. Each entry has the metric type exactly as TrainingPeaks names it in your Metrics list, so you can reuse the type in add_metric. Without athlete_id it reads your own calendar.
MCP calltrainingpeaks_read → list_metrics
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/metrics
| Name | Type | Description |
|---|---|---|
| start_date date required | date | First day to read. |
| end_date date required | date | Last day to read. |
| athlete_id string | string | Athlete from list_athletes. Default: your own calendar. |
{
"start_date": "2026-10-01",
"end_date": "2026-10-01"
} {
"metrics": [
{
"date": "2026-11-04",
"type": "Weight",
"value": 71.6,
"unit": "kg"
},
{
"date": "2026-11-03",
"type": "Weight",
"value": 71.9,
"unit": "kg"
}
]
} Records one value for a metric type on the day, like entering a Metric with the plus icon. Take the type from list_metrics so it matches your Metrics list. On an athlete's calendar the athlete sees the entry, which is why the call is confirmed. By default you confirm each call; you can switch that off for this tool.
MCP calltrainingpeaks_write → add_metric
REST endpointPOST https://cotlet.dev/api/v1/trainingpeaks/metrics
| Name | Type | Description |
|---|---|---|
| date date required | date | Calendar day. |
| type string required | string | Metric type as named in list_metrics. |
| value number required | number | Value to record. |
| athlete_id string | string | Athlete from list_athletes. Default: your own calendar. |
{
"date": "2026-10-01",
"type": "type",
"value": 1
} {
"date": "2026-11-05",
"type": "Weight",
"value": 71.4,
"unit": "kg",
"status": "saved"
} Returns one row per day between start_date and end_date: ctl (long-term fitness), atl (short-term fatigue) and tsb (form, CTL minus ATL). The numbers are those of the Dashboard chart, so they follow the CTL and ATL start values set there. They can differ from the numbers on the Home view.
MCP calltrainingpeaks_read → get_fitness_chart
REST endpointGET https://cotlet.dev/api/v1/trainingpeaks/fitness-chart
| Name | Type | Description |
|---|---|---|
| start_date date required | date | First day to read. |
| end_date date required | date | Last day to read. |
| athlete_id string | string | Athlete from list_athletes. Default: your own chart. |
{
"start_date": "2026-10-01",
"end_date": "2026-10-01"
} {
"days": [
{
"date": "2026-11-01",
"ctl": 52.4,
"atl": 58.1,
"tsb": -5.7
},
{
"date": "2026-11-02",
"ctl": 52.6,
"atl": 56.9,
"tsb": -4.3
}
]
} Your logged-in TrainingPeaks profile, AES-256-GCM, in Finland. Not your password.
The 14 TrainingPeaks tools, never the login or a cookie.
Your calendar and metrics, and on a coach account your athletes, groups and Training Plans.
Your subscription, billing, password and account deletion.
Your agent gets a link to sign in again. We never do it for you.
Disable for agents, reset the browser or delete the key. The next call stops.
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.
TrainingPeaks has belonged to Garmin since 22 Jul 2026 and for now runs as its own unit. When it moves a button or renames a field, the fix happens on our side. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | What happens |
|---|---|
| Add planned workout | Appears on the calendar like one added with the plus icon |
| Add workout from library | Copied to the day; the library keeps its own copy |
| Move workout | Moves to the new day with its planned and completed values |
| Comment on workout | Athlete and coach both read it; this tool cannot edit it later |
| Log metric | One value for a metric type on the day |
| Apply Training Plan | The plan's workouts land on each chosen athlete's calendar |
6 of 14 tools ask first: every write, because on an athlete's calendar the athlete sees the result. Reads never ask. Switch the wait off per tool for a scheduled run.
Comments cannot be edited by the tool, so read a comment before you approve it.
{
"name": "add_workout",
"arguments": {
"date": "2026-11-11",
"title": "Threshold intervals",
"sport": "Bike",
"description": "Warm up, then intervals at threshold.",
"planned_duration_minutes": 75,
"planned_tss": 85
}
} curl -X POST https://cotlet.dev/api/v1/trainingpeaks/workouts \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2026-11-11","title":"Threshold intervals","sport":"Bike","description":"Warm up, then intervals at threshold.","planned_duration_minutes":75,"planned_tss":85}' {
"workout_id": "wk_88131",
"date": "2026-11-11",
"title": "Threshold intervals",
"sport": "Bike",
"planned": {
"duration_minutes": 75,
"tss": 85
},
"status": "planned"
} Scripts and cron jobs reach the same tools over REST at /api/v1/trainingpeaks, with the same key and price. A call TrainingPeaks refuses fails and costs nothing. The tools table lists the REST path of each tool.
About $25 a monthfor a coach with 15 athletes, 4,370 credits. TrainingPeaks bills your plan as before.
| Job | Calls | Credits |
|---|---|---|
| Review last week and comment on key sessions, weekly | 24 × 4 | 960 |
| Add next week's library workouts, weekly | 31 × 4 | 1,240 |
| Training load report, weekly | 16 × 4 | 640 |
| Apply the next block to a group, monthly | 3 × 1 | 30 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 4,370 |
The month is our example. TrainingPeaks's own Coach Edition pricing guide models a coach with 15 athletes (guide, 6 Nov 2026); no average roster is published. TrainingPeaks charges $21.99 a month for Coach Edition with up to 4 Basic athletes and $54.99 above that (pricing, 6 Nov 2026). Dollars at the $29 pack rate.
| 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.
| Option | What it does | Where it stops |
|---|---|---|
| JamsusMaximus/trainingpeaks-mcp | Python MCP server with 84 tools, MIT, 195 stars. | Runs on your computer over stdio, for Claude Desktop and Claude Code. Last commit 2 Aug 2026. |
| AndreCNF/trainingpeaks_mcp_modal | Wraps that server on Modal over HTTP for Claude.ai. | You deploy and run it yourself. 0 stars, last commit 29 May 2026. |
| athletedata.health | Hosted MCP for Claude, ChatGPT and Cursor, with many fitness sources. | Its guide says the standard TrainingPeaks connection is read only. |
| TrainingDojo | Hosted MCP that builds and publishes workouts and plans to TrainingPeaks. | Needs a TrainingDojo account; full MCP access is on Pro, $15 a month. |
Pick a GitHub server if you are happy to run it on your own computer. Pick Cotlet if your agent should work from the ChatGPT or Claude apps, on a schedule, without a server of your own.
Cotlet is run by Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273), working since 2019. The founders are Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the TrainingPeaks tools go to contact@cotlet.dev.
Sign up at cotlet.dev, log in to TrainingPeaks once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your TrainingPeaks account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in TrainingPeaks: plan next week's workouts; weekly training load report; check which athletes missed their plan. You ask in plain words, and anything that reaches other people waits for your OK first.
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 way in for AI agents; you do not need one to use REST.
Sign up free at https://cotlet.dev, open TrainingPeaks under Integrations in the console and log in to TrainingPeaks in its Cloud Browser. Your free trial starts with your first app, no card needed.
No official MCP server (checked 6 Nov 2026). The Partner API goes to approved commercial partners, and its request page says no new partners are accepted for now.
You can sign in with any account. TrainingPeaks says Calendar Export is for Premium athletes, and its help center says a Basic account saves only 5 workouts in the Workout Library, so library jobs fit Premium and coach accounts better.
Not for your own calendar. Listing athletes and Training Plans, and applying a plan, need a coach account.
Only in early access for Partner API partners (Partners API wiki, 6 Nov 2026). To react to a missed workout, run your agent on a schedule and read the calendar.
Only the way in. Both have the same 14 tools, inputs and answers, one API key and one price. Agents use MCP; scripts, cron jobs and HTTP steps use REST.
No. Cotlet is independent and not affiliated with TrainingPeaks or Garmin, which has owned TrainingPeaks since 22 Jul 2026.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy