Skip to main content
Glama

How to connect Strava to Claude Code, ChatGPT and any AI agent

Yes, Claude, ChatGPT and other AI agents can work in your Strava account. Strava's official Claude connector is read-only and only for Strava subscribers, and Strava has no official ChatGPT app. Cotlet.dev connects your own signed-in Strava account to any AI agent, so you can ask in plain words and the AI lists your activities and updates their gear for you.

What you can ask

List all my rides from the last 7 days with distance, moving time and elevation gain.

Set the gear on every run since October 1 to my Nike Pegasus 41.

Change the bike on Saturday's 82 km ride to my Canyon Endurace.

Show my 10 longest runs this month and which shoes I wore for each one.

How many km are on my Hoka Clifton 9? List the runs logged with them since August.

Related MCP server: Strava MCP Server

Connect in 2 minutes

Get your API key at https://cotlet.dev/app and export it as COTLET_API_KEY.

Claude Code

claude mcp add --transport http cotlet https://cotlet.dev/mcp/v1 --header "Authorization: Bearer $COTLET_API_KEY"

ChatGPT

Settings → Apps → add connector URL https://cotlet.dev/mcp/v1, then sign in with Cotlet.dev. No API key needed.

Cursor

Copy .cursor/mcp.json from this repo into your project:

{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${COTLET_API_KEY}"
      }
    }
  }
}

Run it locally (stdio)

This repo is a real MCP server. It speaks MCP over stdio, lists its Strava tools without any key, and forwards every tool call to the hosted Cotlet.dev server. The hosted URL above stays the recommended way. Use this when your client only starts local servers.

{"mcpServers":{"strava":{"command":"uvx","args":["strava-cotlet-mcp"],"env":{"COTLET_API_KEY":"your-key"}}}}

Or with Docker:

docker build -t strava-mcp .
docker run -i --rm -e COTLET_API_KEY strava-mcp

Tools: strava_guide, strava_status, strava_open, strava_read, strava_click, strava_type, strava_close. Without COTLET_API_KEY a tool call answers: "Set COTLET_API_KEY. Get a key at https://cotlet.dev/app".

Command line

Python 3.10+, nothing else to install. From PyPI:

pip install strava-cotlet-mcp        # or run it once: uvx strava-cotlet-mcp connect
strava-cotlet-mcp connect

Or straight from this repo:

export COTLET_API_KEY="your-key"
python3 strava_agent.py connect   # ready config for Claude Code, Cursor, ChatGPT
python3 strava_agent.py status    # is Strava ready in your Cotlet.dev account
python3 strava_agent.py guide     # Strava screens and sign-in link
python3 strava_agent.py read      # open Strava, read the page, close the browser
python3 strava_agent.py tools     # list Cotlet.dev tools
python3 strava_agent.py serve     # start the stdio MCP server (same as no argument)

Questions from Strava users

Does Strava have an API?

Strava has an official API and, since 1 June 2026, an official MCP connector (checked 27 Oct 2026). The MCP is read-only, works with Claude only and needs a paid Strava subscription. Cotlet.dev works in your own signed-in Strava account, so your AI agent can list activities and update gear with no API key and no code.

Is there an official Strava integration for ChatGPT?

Strava has no official ChatGPT app. It lists Claude and Gemini as its supported assistants. Add Cotlet.dev as an app in ChatGPT (Settings → Apps, connector URL https://cotlet.dev/mcp/v1), sign in to Strava once in your Cotlet.dev Cloud Browser, and ask ChatGPT in plain words. No code and no Strava API key.

Is there a Strava connector for Claude?

Yes. Strava has an official read-only Claude connector for subscribers. To also update activity gear, run the one-line claude mcp add command above in Claude Code. In the Claude app, add https://cotlet.dev/mcp/v1 as a custom connector. Claude then works in your own Strava account through Cotlet.dev.

Is there a Strava MCP server?

Strava offers an official, Anthropic-verified connector for Claude with read-only access for subscribers. Cotlet.dev is a hosted MCP server that works in Strava for you, 24/7, with Claude, ChatGPT, Cursor, Codex, n8n, Make and Zapier, including updating activity gear.

Find it on

Also works with


More: https://cotlet.dev/integrations/strava-api-mcp-server?utm_source=github&utm_medium=readme&utm_campaign=strava

Start free: https://cotlet.dev/signup?app=strava&utm_source=github&utm_medium=readme&utm_campaign=strava

Available Tools

7 tools
strava_clickB

Click a numbered element on the current Strava page.

NameRequiredDescriptionDefault
elementYesElement number from the last read.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing beyond the action itself. It does not say what the click triggers (navigation, modal, form submission), whether it waits for the page to settle, whether it is reversible, or what happens if the element number is stale or out of range.

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?

One short sentence with no filler and the action front-loaded. It is efficient, though the brevity borders on under-specification given the tool performs a page-mutating interaction.

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

Completeness2/5

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

For a tool with side effects, no annotations, and no output schema to explain the result, the description should cover the read-then-click dependency and what a click returns or changes. It leaves an agent guessing about prerequisites and post-click state, which is a real gap for an interactive action.

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 description coverage is 100%, so the single parameter is already documented as "Element number from the last read" with a minimum of 1. The description's phrase "numbered element" is consistent with the schema but adds no new meaning such as index bounds relative to the page or behavior for invalid numbers.

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 pairs a specific verb ("Click") with a specific target ("a numbered element on the current Strava page"), which is enough to separate it from siblings like strava_type or strava_read. It stops short of explicitly naming those siblings as alternatives, so it is clear but not fully differentiated.

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?

Usage is only implied: "on the current Strava page" suggests a page must already be open, and "numbered element" suggests a prior read, but neither prerequisite is stated. There is no guidance on when to prefer this over strava_type or strava_guide, nor on what to do when the element number is unknown.

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

strava_closeA

Close the Strava browser session when the work is done, so credits stop running.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full disclosure burden. It adds valuable business context ('credits stop running'), but says nothing about session state loss, idempotency, or what happens if no session is open — meaningful gaps for a session-teardown operation.

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?

One sentence, front-loaded with the action and followed by the reason it matters. No waste.

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 zero-parameter, simple lifecycle call with no output schema, the description covers what it does, when to call it, and why it matters. Only the edge case of closing with no active session is left unaddressed.

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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies.

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?

States a specific verb and resource ('Close the Strava browser session') and implicitly pairs with the sibling strava_open as its inverse, so an agent can distinguish it from read/click/type tools at a glance.

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?

Gives an explicit trigger condition ('when the work is done'), which is real when-to-use guidance. It does not name alternatives or warn about cases where closing early would be wrong, but the trigger is unambiguous.

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

strava_guideA

How to work in Strava (list activities and update gear): its screens and the sign-in link. Call this first.

NameRequiredDescriptionDefault
taskNoWhat you want done in Strava, in your words.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does disclose that the tool returns instructional content (screens, sign-in link) and implies it is a prerequisite step rather than an action, but it never explicitly says it performs no navigation or mutation and does not describe how the guide is structured or how large it is.

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?

One compact sentence with no filler. The most important routing instruction, 'Call this first,' sits at the end rather than the front, which is the only structural weakness.

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?

For an entry-point guide tool with no output schema and a trivial input, the description covers enough to select it, but it leaves the return shape and the coverage of the guide vague. An agent knows to call it first but not what it will actually get back or how to use it afterwards.

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 100% and the single 'task' parameter is self-describing, so the schema does the work. The parenthetical 'list activities and update gear' hints at the kinds of tasks to pass in but adds no format or constraint detail beyond that.

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 states the resource (Strava) and the kind of output (a guide covering screens and the sign-in link), plus the scope of tasks it covers (listing activities, updating gear). The verb is soft ('How to work in'), but an agent can tell this is the orientation/onboarding tool rather than one of the action siblings like strava_read or strava_click.

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?

'Call this first' gives an explicit ordering rule relative to the other strava_* tools, which is the key usage decision here. It does not state when to skip it or what to do if the guide is already known, so it stops short of full when/when-not guidance.

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

strava_openB

Open a Strava page in your signed-in Cloud Browser (default https://www.strava.com) to work with list activities and update gear.

NameRequiredDescriptionDefault
urlNoPage to open. Default: https://www.strava.com

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that the browser is 'signed-in' (an auth-state detail not in structured data), but says nothing about whether a new tab is opened, what happens if a page is already open, or whether the session persists for subsequent calls.

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?

One compact sentence with the core action and default front-loaded. The trailing 'to work with list activities and update gear' clause is vague enough to be slightly wasteful, but nothing is padded.

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?

For a one-optional-param navigation tool with no output schema, the description covers the essentials. The notable gap is its sequencing relationship to the sibling browser tools, which an agent needs in order to call it correctly in a workflow.

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 100% and the single optional url parameter is already documented with the same default, so the description adds no meaning beyond the schema. Baseline 3 applies.

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?

States a specific verb and resource: 'Open a Strava page in your signed-in Cloud Browser', plus the default URL. It hints at follow-on work (list activities, update gear) but does not explicitly contrast itself with siblings like strava_status or strava_guide, so an agent must infer it is the entry point.

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 phrase 'to work with list activities and update gear' implies usage context, but there is no explicit when-to-use or when-not guidance, and no mention that it should precede strava_read/strava_click/strava_type or how it relates to strava_status.

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

strava_readA

Read the current Strava page: its text and numbered buttons, links and fields.

NameRequiredDescriptionDefault
elementNoRead only inside this element.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; the verb 'Read' does convey a non-mutating operation and the enumeration of returned content is useful disclosure. However, it omits whether element numbering is stable across reads, whether the read requires a page to be open first (strava_open), and any cost or timeout behavior.

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?

A single front-loaded sentence with the verb first and the returned content enumerated after the colon. No filler or redundancy.

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 simple, zero-required-parameter read tool with no output schema, the description adequately covers what comes back and that a current page is the target. The one real gap is that the numbering scheme of buttons/links is left undefined even though sibling click/type tools almost certainly consume those numbers.

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 description coverage is 100% and the single 'element' parameter is documented inline as 'Read only inside this element', so the schema does the work. The description never mentions scoping to an element, adding nothing beyond the schema; baseline 3 applies.

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?

States a specific verb and resource ('Read the current Strava page') plus the payload returned (text, numbered buttons, links, fields), which makes it distinguishable from mutation siblings like strava_click and strava_type. It does not, however, explicitly contrast itself with strava_status or strava_guide, which are the closest ambiguous alternatives.

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?

Usage is only implied: 'the current page' suggests reading state before acting, and 'numbered buttons' hints that the indices feed strava_click/strava_type. There is no explicit statement of when to call this versus strava_status or strava_guide, and no exclusions or ordering advice.

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

strava_statusA

Check that your Cotlet.dev account and Strava are ready: account, credits and Strava connection.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/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. 'Check' implies a read-only operation and the description lists what is verified, but it omits return format, failure behavior, permission requirements, and confirmation that no state is changed.

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 single sentence is front-loaded and free of redundant wording. It could be slightly better structured by stating the action first and the readiness items second, but it contains no wasted text.

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 low complexity, but with no annotations and no output schema the description should clarify what a successful or failed status response looks like. It also does not explain when an agent should call this versus the other Strava tools.

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, so parameter semantics are not a concern. Baseline of 4 is appropriate because there is nothing to document or compensate for.

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?

States a specific verb ('Check') and the resources being verified: Cotlet.dev account, credits, and Strava connection. It distinguishes itself from the interaction-oriented siblings only implicitly, since it never names them as alternatives.

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 word 'ready' implies a preflight check before using other Strava tools, but the description never explicitly says when to use this tool, when not to use it, or which sibling it replaces.

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

strava_typeB

Type text into a numbered field on the current Strava page.

NameRequiredDescriptionDefault
textYesText to type.
elementYesField number from the last read.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the entire burden, yet it says nothing about what typing does to existing field contents, whether the text is submitted or merely entered, what happens if the element number is stale, or how failures are reported. For a tool that mutates browser page state, these are meaningful omissions.

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?

A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity is partly what leaves behavioral gaps unaddressed.

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

Completeness2/5

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

The tool is simple (two required parameters, no output schema), but interaction with live page state means an agent needs to know the prerequisite of a prior read and what a successful or failed type looks like. Neither is covered, so the definition is under-specified for a UI-mutating tool with no annotations to fall back on.

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 description coverage is 100%, so both parameters are already documented; the description only echoes the 'numbered field' concept already present in the element parameter. No additional meaning, format, or constraint is contributed beyond the schema, so the baseline 3 applies.

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?

States a specific verb and resource ('Type text into a numbered field') plus the operating scope ('the current Strava page'), which lets an agent distinguish it from strava_click and strava_read. It stops short of naming a sibling or explicitly contrasting with them, so it lands just below the top band.

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 phrase 'numbered field on the current Strava page' implies the read-then-type workflow and that the page must already be open, but the description never states that prerequisite, nor when to choose strava_click or strava_read instead. Guidance is inferred rather than given.

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.

  1. 7 tool updatesv1.1.0
    • First observedstrava_click
    • First observedstrava_close
    • First observedstrava_guide
    • First observedstrava_open
    • First observedstrava_read
    • First observedstrava_status
    • First observedstrava_type

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool maps to a distinct step in a browser-automation lifecycle: guide, status check, open, read, click, type, close. There is no meaningful overlap between them, and the workflow ordering is explicit (guide first, close last).

Naming Consistency5/5

All seven tools use the same strava_ prefix followed by a short lowercase verb or noun (guide, status, open, read, click, type, close). The pattern is uniform and immediately readable as a single coherent family.

Tool Count5/5

Seven tools is a tight, well-scoped set for driving a signed-in browser session against one site. Every tool corresponds to a necessary primitive in that loop, with no redundant affordances.

Completeness4/5

The surface covers the essential interaction loop: orient (guide/status), navigate (open), inspect (read), act (click/type), and clean up (close). Minor gaps exist—no explicit scroll, back/navigation, wait-for-load, or file/upload helper—which an agent can usually work around by re-reading the page.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers