Intervals MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Intervals MCPWhat's my average power for last week's rides?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Intervals MCP
Make chat your cycling coach (for better or for worse)
Setup
Requires Docker Compose and chat developer mode access.
Create a secure MCP tunnel associated with your chat workspace and a runtime API key with tunnels read + use access.
Clone this repo and configure
CONTROL_PLANE_TUNNEL_ID,CONTROL_PLANE_API_KEY, andINTERVALS_API_KEYin your .env.Start the server:
docker compose up -d --build docker compose psEnable Developer mode in chat, then add a connection in plugins using tunnel and select yours. More info in the tunnel guide.
Related MCP server: intervals.mcp
Tools
All tools are read-only for now. Write access is the future goal so that chat can create workouts for you.
athlete_get— athlete profileactivities_list— activities betweenoldestandnewestactivity_get— one activity byactivityIdwellness_list— wellness betweenoldestandnewestevents_list— calendar events betweenoldestandnewest
Available Tools
5 toolsactivities_listARead-onlyIdempotent
List Intervals activities in an inclusive date range.
| Name | Required | Description | Default |
|---|---|---|---|
| newest | Yes | Calendar date in YYYY-MM-DD format | |
| oldest | Yes | Calendar date in YYYY-MM-DD format | |
| athleteId | No | Intervals athlete ID; defaults to 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the inclusive date-range behavior, which is useful, but doesn't disclose pagination, ordering, or default athleteId behavior beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the verb and resource, and includes the key scoping detail ('inclusive date range'). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and safety annotations, the description is mostly adequate. However, it doesn't mention pagination, result ordering, or the optional athleteId behavior, which an agent might need to know for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds the 'inclusive date range' semantics, which clarifies the boundary behavior of newest/oldest, but doesn't add detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('Intervals activities') with a clear scope ('in an inclusive date range'). It distinguishes from siblings like activity_get (single activity) and wellness_list/events_list (different resources), though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing activities within a date range, and the sibling names suggest alternatives, but it doesn't explicitly state when to prefer this over activity_get or other list tools. No exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
activity_getARead-onlyIdempotent
Get one Intervals activity by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| intervals | No | Include detected intervals | |
| activityId | Yes | Intervals activity ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds no additional behavioral context beyond the core retrieval operation; it is not misleading but contributes little extra.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler or redundant wording. It front-loads the core action and the key qualifier 'by ID' that differentiates it from list operations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch-by-ID tool with two well-documented parameters and annotations declaring safety and idempotence, the minimal description is sufficient. The return value is not specified but the 'get' verb in the tool name leaves little ambiguity; the description is complete enough 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; both 'activityId' and 'intervals' are documented in the input schema. The description does not add parameter semantics beyond that, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb (Get) with a clear resource ('one Intervals activity') and retrieval method ('by ID'). This distinguishes it from siblings like activities_list, which presumably returns multiple activities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the obvious usage context: use this when you need a single activity by ID. It does not explicitly name alternatives or exclusions, but the 'one' and 'by ID' provide clear context and the get-by-ID pattern is self-explanatory among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
athlete_getARead-onlyIdempotent
Get an Intervals athlete profile.
| Name | Required | Description | Default |
|---|---|---|---|
| athleteId | No | Intervals athlete ID; defaults to 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description confirms a read operation ('Get') and is consistent with annotations. It does not add further behavioral context, such as authentication requirements or response format, but the annotation coverage lowers the burden. No contradiction found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence that directly states the action and target. It is front-loaded with the key information ('Get an Intervals athlete profile') and contains no unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one optional parameter), rich annotations, and absence of an output schema, the description is minimal but adequate. It communicates the essential purpose and is sufficient for an agent to know what the tool does. Potential gaps like response structure are mitigated by the simplicity of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the sole parameter athleteId, including its type, description, and default value, providing 100% coverage. The tool description adds no additional parameter context, so it relies on the schema. With this high coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'Intervals athlete profile'. It is specific enough to distinguish from sibling tools like activities_list and wellness_list, which target different data types. It is not a tautology, as it provides context about the system (Intervals).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for retrieving athlete profile data but does not explicitly state when to use this tool over alternatives. There is no mention of exclusions or conditions (e.g., 'use activities_list for activities'). The intended context is inferable from the name and siblings, but explicit guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_listARead-onlyIdempotent
List Intervals calendar events in an inclusive date range.
| Name | Required | Description | Default |
|---|---|---|---|
| newest | Yes | Calendar date in YYYY-MM-DD format | |
| oldest | Yes | Calendar date in YYYY-MM-DD format | |
| resolve | No | Resolve linked event data | |
| category | No | Event categories | |
| athleteId | No | Intervals athlete ID; defaults to 0 | |
| calendar_id | No | Calendar ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, destructiveHint, idempotentHint). The description adds the 'inclusive date range' detail, which clarifies how the date parameters behave. However, it does not disclose the response format or any filtering behavior beyond what the annotations imply. This is an acceptable but not exceptional disclosure given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that leads with the action and resource, then specifies the date range scope. There is no redundancy or filler, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of a listing tool and the thorough schema, the description adequately communicates what is needed for a correct call. It does not mention response shape, but that is typically inferred for list operations. The absence of an output schema is offset by the clarity of the purpose and parameters, though a note on return format would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for all 6 parameters, so the description does not need to re-explain them. The phrase 'inclusive date range' adds semantic meaning to the newest/oldest parameters, but it does not elaborate on optional parameters like resolve or category. Its contribution is marginal because the schema already covers the basics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Intervals calendar events within an inclusive date range. It specifies a distinct resource (calendar events) that differentiates it from siblings like activities_list or athlete_get, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or scenarios where another tool should be preferred. An agent would have to infer usage from the name alone, which is insufficient for distinct selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wellness_listARead-onlyIdempotent
List Intervals wellness records in an inclusive date range.
| Name | Required | Description | Default |
|---|---|---|---|
| newest | Yes | Calendar date in YYYY-MM-DD format | |
| oldest | Yes | Calendar date in YYYY-MM-DD format | |
| athleteId | No | Intervals athlete ID; defaults to 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the 'inclusive date range' behavior, which is useful, but it does not disclose output format, pagination, or other runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that leads with the verb and resource, then clarifies the date-range scope. It contains no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with complete schema documentation and clear annotations, the description is nearly complete. It could benefit from a mention of what the response contains, but the absence of an output schema is partially offset by the tool's simplicity and the 'list' semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter semantics by specifying that the date range is inclusive, which is not stated in the schema. This helps the agent understand how newest and oldest relate to each other.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('Intervals wellness records'), and the scope (an inclusive date range). It differentiates from sibling tools like activities_list and events_list by naming the wellness resource explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever wellness records in a date range are needed, as opposed to activity or event records. However, it does not explicitly name alternatives or state when not to use this tool.
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.
5 tool updates
v0.1.0- First observed
activities_list - First observed
activity_get - First observed
athlete_get - First observed
events_list - First observed
wellness_list
TDQS
Scored across 5 tools
Each tool targets a distinct resource-action pair: athlete, activities, wellness, and events, with list versus get clearly separating collection from detail operations. An agent would not struggle to pick among them.
All tool names consistently follow a resource_verb pattern in snake_case, with plural resources for list operations and singular resources for detail operations. There are no stylistic deviations or ambiguous verbs.
Five tools is a compact, well-scoped set for a read-only fitness data server. Each tool covers a meaningful endpoint with no redundancy or bloat.
The surface covers core read workflows: athlete profile, activity list/detail, wellness records, and calendar events. It lacks write operations and detail endpoints for wellness/events, but these are likely outside the read-only scope and list results may be sufficient.
Maintenance
Related MCP Connectors
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Turn Claude or ChatGPT into a cycling coach that plans your week, grades it, and adapts. Free beta.
- JotiOAuthcom.kompetic
Read your workouts, history, and stats; create and schedule new workouts. Writes are additive only.
AI cycling coach: training plans, workouts, nutrition, strength training, Strava, Garmin and Wahoo.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables AI assistants to interact with Intervals.icu fitness tracking and wellness data, allowing users to fetch, filter, and group activities or health metrics. It provides structured summaries of workouts and physical well-being through natural language queries.4-
- FlicenseAqualityDmaintenanceEnables AI assistants to access and analyze intervals.icu training data including activities, fitness metrics (CTL/ATL/TSB), wellness stats, and calendar events. Supports natural language querying of athletic performance for training insights and workout planning.6-
- AlicenseAqualityDmaintenanceEnables interaction with Intervals.icu data, including activities, wellness, and calendar events, via natural language.1018 npm1MIT
- AlicenseNot gradedqualityBmaintenanceConnects to Intervals.icu to let users query training data, create workouts, manage calendar events, and coach athletes through natural language in Claude Desktop.10 npmMIT