Skip to main content
Glama
banananovej-chuan

TrainingPeaks MCP Server

TrainingPeaks MCP Server

PyPI Python 3.12+ License: MIT

A Model Context Protocol server for TrainingPeaks with an analytics focus — enabling real-time querying of training data, performance trends, CTL/ATL/TSB analysis, and training load optimization through Claude Desktop.

# Install and run — no cloning needed
uvx tp-mcp-server

Features

14 tools organized across 5 categories:

Category

Tools

Description

Auth

tp_auth_status, tp_refresh_auth

Check/refresh authentication

Profile

tp_get_profile

Athlete profile + auto-detect ID

Workouts

tp_get_workouts, tp_get_workout

List and detail past workouts

tp_get_planned_workouts

Upcoming planned workouts with coach instructions

Fitness

tp_get_fitness

CTL/ATL/TSB with computed values

Peaks

tp_get_peaks, tp_get_workout_prs

Personal records by sport

Analytics

tp_training_load_summary

Weekly/monthly TSS, load ramp rate

tp_fitness_trend

CTL trajectory, 7-day projection

tp_workout_analysis

Efficiency factor, variability index

tp_performance_summary

Sport-specific volume & consistency

tp_training_zones_distribution

IF-based zone breakdown

Key feature: CTL/ATL/TSB are computed from TSS using standard exponential weighted moving averages (42-day/7-day time constants), since the TP API doesn't return these values directly.

Related MCP server: intervals-icu-mcp

The fastest way to get running — no cloning or venv needed.

1. Install uv (if you don't have it)

uv is a fast Python package manager built by Astral (the company behind Ruff). It includes uvx, a tool that can download and run Python packages in isolated environments — no manual setup needed. It's open-source, widely adopted in the Python community, and used by projects like FastAPI, Pydantic, and many MCP servers.

curl -LsSf https://astral.sh/uv/install.sh | sh
  1. Open your browser and go to trainingpeaks.com and log in

  2. Open Developer Tools (Cmd+Option+I on Mac, F12 on Windows/Linux)

  3. Click the Application tab (Chrome/Edge) or Storage tab (Firefox)

  4. In the left sidebar, expand Cookies and click on https://www.trainingpeaks.com

  5. Find the cookie named Production_tpAuth

  6. Double-click its Value column and copy the entire string

3. Add to Claude Desktop

Open your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Note: If this file doesn't exist yet (first time configuring an MCP server), create it yourself. On macOS, the Claude folder inside Application Support should already exist if you've opened Claude Desktop at least once — you just need to create the claude_desktop_config.json file inside it.

First, find the full path to uvx:

which uvx

This will output something like /Users/yourname/.local/bin/uvx.

Then add this to your config (replace the command path and your_cookie_value):

{
  "mcpServers": {
    "trainingpeaks": {
      "command": "/Users/yourname/.local/bin/uvx",
      "args": ["tp-mcp-server"],
      "env": {
        "TP_AUTH_COOKIE": "your_cookie_value"
      }
    }
  }
}

Important: You must use the full absolute path to uvx (not just "uvx"). Claude Desktop has a limited PATH and won't find it otherwise.

4. Restart Claude Desktop

Fully quit and reopen Claude Desktop. You should see "trainingpeaks" listed as a connected MCP server (look for the hammer icon).

That's it — no cloning, no virtual environments. uvx automatically downloads and runs the package from PyPI.


Alternative: Install from source

If you want to modify the code or contribute:

Prerequisites

  • Python 3.12+

  • uv (recommended) or pip

Steps

git clone https://github.com/banananovej-chuan/tp-mcp-server.git
cd tp-mcp-server
uv venv --python 3.12
uv pip install .

Get your cookie (see step 2 above), then configure the environment:

cp .env.example .env
# Edit .env and paste your cookie value

For Claude Desktop, use the absolute path to the venv Python:

{
  "mcpServers": {
    "trainingpeaks": {
      "command": "/absolute/path/to/tp-mcp-server/.venv/bin/python",
      "args": ["-m", "tp_mcp_server"],
      "env": {
        "TP_AUTH_COOKIE": "your_cookie_value"
      }
    }
  }
}

Important: The command path must be an absolute path. On macOS/Linux it starts with /, on Windows use the full path like C:\\Users\\yourname\\tp-mcp-server\\.venv\\Scripts\\python.exe. Do not use ~ or relative paths.

Example Queries

Once connected in Claude Desktop, try:

  • "What's my current fitness level?"

  • "Show my planned workouts for the next 2 weeks"

  • "Show my training load trend for the last 3 months"

  • "Analyze my last bike workout"

  • "What are my power PRs?"

  • "How is my training zone distribution this month?"

  • "Compare my bike performance over the last 90 days"

The TrainingPeaks auth cookie expires periodically (typically every few days to weeks). When it expires:

  1. You'll see authentication errors in Claude Desktop

  2. Re-extract the cookie from your browser (repeat Step 2 from Quick Start)

  3. Update the TP_AUTH_COOKIE value in your Claude Desktop config (and .env file if using source install)

  4. Restart Claude Desktop

Architecture

src/tp_mcp_server/
├── server.py              # FastMCP entry point
├── mcp_instance.py        # Shared MCP instance
├── config.py              # Environment config
├── api/
│   ├── client.py          # Async httpx client, token management
│   └── endpoints.py       # API URL constants
├── auth/
│   ├── storage.py         # Cookie storage (env/keyring)
│   └── browser.py         # Browser cookie extraction
├── tools/
│   ├── auth.py            # Auth status/refresh
│   ├── profile.py         # Athlete profile
│   ├── workouts.py        # Workout list/detail
│   ├── fitness.py         # CTL/ATL/TSB data
│   ├── peaks.py           # Personal records
│   └── analytics.py       # Derived analytics
├── models/
│   ├── workout.py         # Workout models
│   ├── fitness.py         # Fitness models + CTL computation
│   ├── peaks.py           # PR models
│   └── profile.py         # Profile model
└── utils/
    ├── dates.py            # Date helpers
    └── formatting.py       # Output formatting

Known Limitations

  • Internal API: TrainingPeaks has no public API. This uses the same internal API as the web app, which could change without notice.

  • Cookie auth: Requires periodic browser re-login to refresh the cookie.

  • Sport-level PRs: The /personalrecord/v2/athletes/{id}/{sport} endpoint returns 500. PRs are aggregated from individual workouts instead.

  • CTL/ATL/TSB: The API returns "NaN" for these values. They are computed locally from TSS data.

  • Rate limiting: Requests are throttled to 150ms apart to avoid hitting TP rate limits.

Available Tools

14 tools
tp_auth_statusA

Check TrainingPeaks authentication status.

Returns whether you have a valid auth cookie and bearer token. If not authenticated, provides instructions for setting up credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden. It discloses that it returns whether auth is valid and provides setup instructions if not. No side effects are expected for a read-only status check, and the output schema covers format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and no unnecessary words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple auth-check tool with no parameters and an output schema, the description is complete. It covers what the tool does and what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema coverage is 100% trivially. The description adds no parameter info, but baseline for 0 parameters is 4. No additional meaning needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks TrainingPeaks authentication status, using a specific verb 'Check' and a clear resource. It inherently distinguishes from sibling tools which handle fitness data, workouts, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage before other TrainingPeaks tools by stating it returns auth validity and instructions if not authenticated. However, it does not explicitly state when to use or when not to use, though context is clear for an auth check tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_fitness_trendA

Analyze CTL/ATL/TSB trajectory and project future values.

Args: days: Number of days to analyze (default 90).

Returns trend direction, rate of change, and 7-day projected CTL/ATL/TSB.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It states the tool returns trend direction, rate of change, and projections, but does not disclose methodology (e.g., exponential moving average) or any behavioral traits like data requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two sentences plus an args line, front-loading the main purpose and using no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema, the description sufficiently covers input (days) and output (trend direction, rate of change, projected values). It lacks detail on the projection algorithm but remains functional.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero schema description coverage, the description adds meaning by explaining the 'days' parameter as the number of days to analyze, including its default value, which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies analyzing CTL/ATL/TSB trajectory and projecting future values, distinguishing it from sibling tools like tp_get_fitness that likely return current values.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for trend analysis and projection but lacks explicit guidance on when to use this tool over alternatives like tp_performance_summary or tp_training_load_summary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_get_fitnessA

Get CTL (fitness), ATL (fatigue), and TSB (form) performance data.

Args: days: Number of days to look back (default 90). Ignored if start_date is set. start_date: Start date (YYYY-MM-DD). Overrides days parameter. end_date: End date (YYYY-MM-DD). Defaults to today.

Returns daily training load data with computed CTL/ATL/TSB values and current fitness status. To get accurate CTL/ATL values, the API fetches extra history for the exponential decay calculation.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
start_dateNo
end_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It discloses that the API fetches extra history for exponential decay calculation, which is a notable hidden behavior. It also describes return values (daily load data, current status).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a main purpose sentence, an Args section, and a Returns note. It is concise (7 sentences) with no fluff, front-loading the core function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 optional parameters, no enums, and an output schema, the description fully covers parameter interactions, return type, and the extra fetch behavior. It provides sufficient context for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds critical meaning: explains days default 90, that start_date overrides days, and the expected date format (YYYY-MM-DD). This goes beyond the schema's minimal info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves CTL, ATL, and TSB performance data, specifying the resource (fitness data) and action (get). It distinguishes from siblings by mentioning daily training load with computed values and extra history fetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains parameter behavior (days vs start_date) but does not provide explicit guidance on when to use this tool over alternatives like tp_fitness_trend or tp_training_load_summary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_get_peaksA

Get personal records by scanning recent workouts for a given sport.

Args: sport: Sport type — "Bike", "Run", "Swim", or "Hike" (default "Bike"). days: Number of days to scan (default 90, max 365). pr_class: Filter by PR class — "Power", "HeartRate", or None for all.

Scans workouts that have PRs and aggregates the best values per type. Shows the top record for each duration/distance across the time range.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportNoBike
daysNo
pr_classNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains that the tool scans workouts that have PRs, aggregates best values, and shows top records per duration/distance. This adds meaningful behavioral context beyond just 'get peaks', though it omits potential performance implications or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear one-line summary followed by an Args section and then an elaboration. It is somewhat verbose but front-loaded with the main purpose. Slight trimming could improve conciseness without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (making return format documentation unnecessary), the description covers the tool's operation sufficiently: it explains what it scans, how it aggregates, and what it displays. It doesn't miss critical aspects for a data retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides details for all three parameters: sport allowed values (Bike, Run, Swim, Hike), days max (365), and pr_class options (Power, HeartRate, None). This adds value beyond the schema's type and default information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets personal records by scanning recent workouts for a given sport, using specific verbs like 'Get' and 'scanning'. It distinguishes itself by focusing on aggregated peaks over a time range, differentiating from sibling tools like tp_get_workout_prs which likely focus on individual workout PRs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving overall peaks across workouts and days, but it does not explicitly state when to use this tool versus alternatives like tp_get_workout_prs or tp_fitness_trend. No when-not or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_get_planned_workoutsA

Get upcoming planned workouts from TrainingPeaks.

Args: start_date: Start date (YYYY-MM-DD). Defaults to today. end_date: End date (YYYY-MM-DD). Defaults to 14 days from now. workout_type: Filter by type (e.g. "Bike", "Run", "Swim", "Strength"). limit: Maximum number of workouts to return (default 20).

Returns planned workouts with date, type, planned duration/distance/TSS, workout instructions, and coach comments. Sorted chronologically (nearest first). The TP API limits requests to 90 days at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNo
end_dateNo
workout_typeNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully discloses behavior: returns specific fields (date, type, duration/distance/TSS, instructions, comments), chronological sorting, and a 90-day API limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using a clear structure with an Args block and Returns list, every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no required/ enums, and an output schema present, the description is complete: it explains parameters, return fields, sorting, and limitation, sufficient for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates by explaining each parameter: start_date/end_date as date strings, workout_type with examples, and limit with default value, adding meaning beyond bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'upcoming planned workouts from TrainingPeaks', distinguishing it from siblings like tp_get_workouts (completed workouts) and tp_get_workout (single workout).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains default dates, sorting, and API limits, providing clear usage context but does not explicitly exclude alternatives like tp_get_workouts for completed workouts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_get_profileA

Get your TrainingPeaks athlete profile.

Returns your name, athlete ID, email, and other profile information. The athlete ID is needed for other TrainingPeaks queries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only describes what is returned, lacking information on authentication, rate limits, or side effects, which is a gap for a profile retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, no unnecessary words, and front-loads the core purpose. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (from context signals), the description need not detail return format. It provides key fields and notes the importance of athlete ID, making it largely complete for a simple profile getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the input schema is empty (100% coverage). The baseline for 0 parameters is 4, and no additional parameter info is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the athlete's TrainingPeaks profile, listing specific fields like name, athlete ID, and email. It effectively distinguishes itself from sibling tools that focus on fitness trends, workouts, or auth status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use before other queries by noting the athlete ID is needed for them, but does not explicitly state when to use this tool over alternatives or exclude certain scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_get_workoutA

Get detailed information about a specific workout.

Args: workout_id: The TrainingPeaks workout ID.

Returns full workout details including power, HR, speed, elevation, description, and coach comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly describes a read operation without mentioning side effects, but does not explicitly state it is read-only or safe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, covering purpose, parameter, and return details in a few lines. Minor redundancy with the Args line could be streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single parameter and the presence of an output schema, the description provides sufficient context about inputs and outputs. However, it lacks details on error cases (e.g., invalid ID).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value beyond the schema by explaining that the integer parameter is a TrainingPeaks workout ID and lists the types of data returned (power, HR, etc.), compensating for 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed information about a specific workout, distinguishing it from sibling tools like tp_get_workouts which likely list multiple workouts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for a specific workout ID, and the sibling list provides context, but there is no explicit when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_get_workout_prsB

Get personal records from a specific workout.

Args: workout_id: The TrainingPeaks workout ID.

Returns all PRs achieved in this workout, grouped by class (Power, HR, etc.) and time frame (All-Time, Last 90 Days, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It mentions the return structure but does not state that the operation is read-only, what side effects exist (likely none), or any authentication/authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (three sentences) with a clear Args/Returns structure. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and an output schema. The description adequately explains the functionality and return structure, but lacks usage context relative to sibling tools and behavioral disclosures due to missing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds a brief clarification for the sole parameter ('The TrainingPeaks workout ID'), which is helpful but minimal. It does not provide additional context like format constraints or examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves personal records from a specific workout and details the grouping structure. However, it does not explicitly differentiate from similar sibling tools like tp_get_peaks, which may also involve PRs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives, nor any context about prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_get_workoutsA

Get a list of workouts from TrainingPeaks.

Args: start_date: Start date (YYYY-MM-DD). Defaults to 30 days ago. end_date: End date (YYYY-MM-DD). Defaults to today. workout_type: Filter by type (e.g. "Bike", "Run", "Swim", "Strength"). limit: Maximum number of workouts to return (default 20).

Returns workouts with date, type, duration, distance, TSS, HR, and power data. The TP API limits requests to 90 days at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNo
end_dateNo
workout_typeNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses returned data fields (date, type, duration, etc.), defaults, and the 90-day API limit. It doesn't mention whether only completed workouts are returned or auth requirements, but overall transparency is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args section, returns statement, and a note on API limit. It is concise with no fluff, each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, the description covers parameters, return fields, and a key constraint. It is complete for a list tool; the presence of an output schema further reduces the burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description compensates fully. It explains each parameter with defaults, example values for workout_type, and limit default. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a list of workouts from TrainingPeaks,' specifying the verb (get) and resource (list of workouts). This distinguishes it from siblings like 'tp_get_workout' which retrieves a single workout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides sensible defaults and example filter values, implying typical usage. However, it lacks explicit guidance on when to use this tool versus alternatives like 'tp_get_planned_workouts' or 'tp_workout_analysis'. No exclusions or alternative recommendations are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_performance_summaryA

Aggregated performance summary for a sport over time.

Args: sport: Sport type — "Bike", "Run", "Swim" (default "Bike"). days: Number of days to analyze (default 90).

Returns volume, intensity distribution, consistency metrics, and PR timeline for the specified sport.

ParametersJSON Schema
NameRequiredDescriptionDefault
sportNoBike
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only describes output content, not behavioral traits like side effects, authentication needs, rate limits, or data freshness. For a read-only summary tool, more transparency on data recency or calculation method would be beneficial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a concise paragraph with a clear list of returns. It is efficiently structured but could be slightly more front-loaded by leading with the purpose before parameter details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (context signal), the return values are adequately described. The description covers all key aspects of the tool's function with 0 required parameters, though it lacks details on data source or prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explains the 'sport' parameter (type, default 'Bike', examples) and 'days' (number of days, default 90). This adds meaning beyond the schema, though enum values for sport could be made explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides an 'aggregated performance summary for a sport over time' and lists specific outputs (volume, intensity distribution, consistency metrics, PR timeline). It uses specific verbs and resource naming, and the purpose is distinguishable from siblings like tp_fitness_trend or tp_training_load_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives such as tp_training_load_summary or tp_fitness_trend. No context on prerequisites, exclusions, or optimal scenarios is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_refresh_authA

Force refresh the TrainingPeaks bearer token.

Use this if you're getting authentication errors. Clears the cached token and obtains a fresh one from the auth cookie.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that it 'clears the cached token and obtains a fresh one from the auth cookie', revealing the behavioral effect and a dependency (auth cookie). Missing details on failure modes, but sufficient for a 0-param tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus a lead-in line. Front-loaded with purpose, no wasted words, and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an output schema, the description fully covers when to use, what it does, and the behavioral effect. No missing information for an agent to correctly invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100%. Description adds nothing about parameters because there are none. Baseline score of 4 is appropriate for 0-param tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Force refresh the TrainingPeaks bearer token' – a specific verb and resource. It clearly distinguishes from sibling tools like tp_auth_status which checks status, not refreshes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this if you're getting authentication errors', providing a clear condition for use. It implies it's a fix for stale tokens, though doesn't explicitly state when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_training_load_summaryB

Analyze training load trends over time.

Args: days: Number of days to analyze (default 90).

Returns weekly and monthly TSS totals, averages, load ramp rate, and comparison between recent and previous periods.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description alone must convey behavioral traits. It mentions the return content (weekly/monthly TSS, ramp rate, comparison) but does not disclose that this is a read-only operation, required authentication, or any side effects. The behavior is partially transparent but lacks safety cues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (three sentences including the arg list) and front-loads the purpose. Each line adds value, though the argument section could be integrated more naturally.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema (not visible), the description covers the key outputs, but without seeing the schema it's unclear if more detail is needed. For a tool analyzing load trends, the description is adequate but does not explain how to interpret the comparison or ramp rate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description should compensate. It explains the 'days' parameter as 'Number of days to analyze (default 90)'. This adds clarity beyond the schema, which only provided a default value, but does not elaborate on acceptable range or impact of different values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool analyzes training load trends over time and lists return values (TSS totals, averages, ramp rate, comparison). It is specific about the resource (training load) and verb (analyze trends), but does not explicitly differentiate from similar sibling tools like tp_fitness_trend or tp_performance_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as tp_fitness_trend or tp_workout_analysis. The description does not state prerequisites, when not to use, or how contexts differ.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_training_zones_distributionA

Analyze training time and TSS distribution across intensity zones.

Args: start_date: Start date (YYYY-MM-DD). Defaults to {days} days ago. end_date: End date (YYYY-MM-DD). Defaults to today. days: Days to look back if start_date not set (default 30).

Breaks down workouts by IF-based training zones showing how training time and stress are distributed. Helps identify polarized vs pyramidal vs threshold-heavy training patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNo
end_dateNo
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It clearly describes a read-only analytical operation (breaking down workouts by zones) without any mention of side effects or destructive actions. The description adds transparency about what the tool outputs (training time and stress distribution).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two clear paragraphs: one for purpose and one for parameter details. Every sentence adds value, and the docstring-style 'Args' section efficiently documents parameters. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains what the tool does, its analytical outcomes, and all parameters with defaults. Given that an output schema exists (not shown), the description does not need to detail return values. However, it could briefly mention the output format (e.g., zone breakdowns) for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning beyond the schema. It explains defaults for start_date, end_date, and days (e.g., start_date defaults to {days} days ago, days default 30). This adds significant context that the schema alone does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool analyzes training time and TSS distribution across intensity zones, with a specific verb 'analyze' and resource 'training zones distribution'. It highlights the ability to identify training patterns (polarized, pyramidal, threshold-heavy), distinguishing it from siblings like tp_training_load_summary or tp_performance_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for analyzing zone distribution over a date range but lacks explicit guidance on when to use this tool versus alternatives (e.g., tp_fitness_trend, tp_workout_analysis). No exclusion criteria or context for when not to use it are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tp_workout_analysisA

Deep analysis of a specific workout with derived metrics.

Args: workout_id: The TrainingPeaks workout ID.

Returns efficiency factor (NP/avg HR), variability index (NP/avg power), intensity distribution, and comparison context.

ParametersJSON Schema
NameRequiredDescriptionDefault
workout_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the output (derived metrics) but does not explicitly state that the tool is read-only, requires authentication, or has any side effects. Given no annotations, the description partially fulfills the transparency burden but leaves behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence for purpose, then clear args and returns sections. No redundant information, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter analysis tool with an output schema, the description adequately explains inputs and outputs. It doesn't mention authentication or error conditions, but those are reasonable defaults given the sibling context; the output schema likely covers return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (workout_id) is explained with the phrase 'The TrainingPeaks workout ID,' adding context beyond the schema's title 'Workout Id.' This helps the agent understand what value to provide, though format details (e.g., numeric) are implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs 'deep analysis' of a specific workout and explicitly lists derived metrics (efficiency factor, variability index, intensity distribution, comparison context), distinguishing it from raw workout retrieval tools like tp_get_workout.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for analysis vs. raw data but provides no explicit guidance on when to use this tool over siblings like tp_performance_summary or tp_fitness_trend, nor does it mention prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 14 tool updatesv0.2.3
    • First observedtp_auth_status
    • First observedtp_fitness_trend
    • First observedtp_get_fitness
    • First observedtp_get_peaks
    • First observedtp_get_planned_workouts
    • First observedtp_get_profile
    • First observedtp_get_workout
    • First observedtp_get_workout_prs
    • First observedtp_get_workouts
    • First observedtp_performance_summary
    • First observedtp_refresh_auth
    • First observedtp_training_load_summary
    • First observedtp_training_zones_distribution
    • First observedtp_workout_analysis

TDQS

A4/5.0
Disambiguation5/5

Each tool serves a distinct purpose without overlap. For example, tp_get_fitness returns daily CTL/ATL/TSB, tp_fitness_trend projects future values, and tp_training_load_summary provides weekly/monthly TSS totals. Similarly, tp_get_workout gives raw data while tp_workout_analysis computes derived metrics. Auth tools are separate, and each analytics tool focuses on a unique aspect.

Naming Consistency4/5

All tools follow a tp_ prefix with snake_case naming. The verb usage is mostly consistent, with many using 'get_' (e.g., tp_get_fitness, tp_get_workouts) and others using descriptive verbs like 'fitness_trend' or 'performance_summary'. Some names like tp_auth_status or tp_training_zones_distribution are nouns rather than verbs, but overall the pattern is predictable.

Tool Count5/5

14 tools cover a broad yet focused range of fitness data operations including authentication, profile, workouts (planned and completed), fitness metrics, trends, peaks/PRs, and detailed analysis. Each tool earns its place without redundancy or excessive specialization.

Completeness5/5

The tool set provides comprehensive coverage for a read-only analytics server. It includes auth, profile, workout retrieval (planned and historical), fitness metrics, trends, peaks/PRs, workout analysis, training load summary, and zones distribution. No obvious gaps for the domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    A Model Context Protocol (MCP) server for Intervals.icu integration. Access your training data, wellness metrics, and performance analysis through Claude and other LLMs.
    48
    35
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that connects Garmin Connect data to Claude, enabling training analysis, recovery checks, and personalized plans based on real metrics like HRV, training load, and activities.
    14
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Connect TrainingPeaks to Claude and other AI assistants via the Model Context Protocol to query workouts, build structured intervals, manage calendar, track fitness trends, and control training through natural conversation.
    65
    MIT

Latest Blog Posts

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/banananovej-chuan/tp-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server