Skip to main content
Glama
650,536 tools. Updated 2026-10-14 07:08

"Strava" matching MCP tools:

  • Correct one completed activity when the recording got it wrong — its MEASURED numbers (jammed GPS, a dropped sensor, a computer left running) or the DAY it was filed on. Four modes, and picking the right one is the whole job: • `extend` — part of the session DIDN'T RECORD and the athlete says it was like the rest ('первые полчаса не записались, ехал так же'). Pass the new TOTAL `movingTime` in seconds. Volume scales, intensity is kept, and the personal bests stand. Pass `distance` too if they know the real total (their usual loop); otherwise it follows the duration. • `correct` — a recorded number is FALSE ('Страва посчитала 42 км, а я пробежал 10'). Pass the corrected absolute values. Correcting the distance REMOVES this session's distance records — they were computed from the wrong track and the true splits can't be recovered — so tell the athlete that before they apply. • `move` — the recording's CLOCK was wrong, not its numbers: the device filed the session on the wrong day or hour ('записалась на 22 сентября, а ехал сегодня'). Pass `date`, and `time` only if the start time was wrong too. Nothing measured changes and syncs won't move it back; Strava and intervals.icu keep their own date — say so. • `revert` — undo earlier corrections, a move included, and put the provider's original back ('верни как было'). No values needed. All values are absolute NEW totals (seconds, metres), never deltas. You do NOT compute the consequences: the server recomputes TSS, IF, work and time-in-zone and the confirmation card shows every before→after. Ask for whatever you're missing rather than guessing a number — and get_activity first, so you are correcting the real values. Once corrected, the session is the athlete's: syncs from Strava/intervals stop overwriting its measured fields, and it counts as corrected in the week, the load history and the Records tab.
    Connector
    Destructive
    OAuth
  • Read an existing USRProf or uploaded USRProf source artifact without reconstruction, scope replacement or model activation. For chat attachments without artifact IDs, first use import_profile_attachment with explicit upload permission if host file handoff is available; otherwise offer the browser upload page immediately. Do not substitute raw-file commentary for this canonical inspection. Required query: summary, quality, recency, course_fit, coverage or insights. Stored readiness is not current fitness or a new pacing gate. Course context is required for course_fit and optional for coverage only; selection is a preview, never applied. Paged queries default offset 0/limit 20, maximum 100. insights rejects offset, limit and course context and returns six bounded families: durability, uphill, GAP, run/hike, terrain mechanics and terrain-relative strength. Preserve their distinct age scopes, fitted/default provenance and extrapolation disclosures; defaults are not athlete limits. Run/hike above 1,000,000 eligible pairs is resource_limited without suppressing other families. Other rendered views are explicitly unavailable in MCP, not missing athlete evidence; experimental gates remain unchanged. Server owns as-of time. No raw source identities or full graph arrays; no Strava, writes, automatic upload or strategy application. Use goal/planning tools only when separately available, not these observational results as a finish-time prediction.
    ConnectorNo auth
  • List the athlete's recent COMPLETED activities (actual rides/runs/etc. synced from every connected provider — Strava, intervals.icu and the rest — deduplicated at sync) with id, date, sport, name, duration, distance, TSS, IF, NP, avg/max power & HR, kJ, elevation, meaningful-effort count (sustained work efforts, not raw segments), and any existing notes. Use this to find an activity id before writing a summary with set_activity_notes, and to base that summary on the real numbers. Defaults to the 30 most RECENT activities — a row count, not a date window, so for a three-a-week athlete that is ten weeks and for a daily one it is a month. Whenever the answer depends on how much time a stretch covers — a ramp, a stall, consistency, a block review — pass explicit from/to and read the dates you get back. On a row, `coachNote` is the VERDICT line of your own earlier review of that session (an excerpt — `coachNoteChars` is the full length; get_activity returns it whole) and `note` is the athlete's words, cut at 300 characters.
    ConnectorOAuth
  • Compare all nine existing intensity/shape combinations without an elapsed goal. split_percent defaults to 5, inclusive range 0-15. Preserve reference-plan locks, dwell, checkpoint windows, cutoffs and saved GAP settings. Requires current v3 course and runner artifact IDs. Defaults to load_response_evidence_v2 and allow_profile_preparation=false; experimental v3 and in-memory preparation require explicit user approval, never silently retry with permission. Returns bounded canonical alternatives and a private complete planning_report artifact, not an applied/exportable plan or chosen winner. No source replacement, evidence selection or Strava access. Use get_artifact with report_artifact_id for full diagnostics; preserve omission counts and preparation provenance.
    ConnectorNo auth
  • Assess a positive elapsed goal including saved dwell using the existing nine intensity/shape combinations (5% shapes). Preserve reference-plan movement locks, stops, checkpoint windows, cutoffs and saved GAP settings. Requires current v3 course and runner artifact IDs. Defaults to load_response_evidence_v2 and allow_profile_preparation=false; experimental v3 and in-memory preparation require explicit user approval, never silently retry with permission. Returns canonical support/classifications and bounded diagnostics plus a private complete planning_report artifact, not an applied/exportable plan. No source replacement, evidence selection or Strava access. Budget confidence is not certainty of finishing. Use get_artifact with report_artifact_id for full diagnostics; preserve omission counts and preparation provenance.
    ConnectorNo auth
  • GPS & Map Converter — Convert between GPX, KML, KMZ and GeoJSON — the GPS-track and mapping formats used by Garmin, Strava, Google Earth and every GIS tool. Track segments, per-point timestamps, elevations and polygon holes all survive the trip. Anything that cannot survive (a polygon becoming a GPX track, an unlocated feature) is reported in the X-Conversion-Notes header rather than dropped quietly; pass strict=true to refuse instead. [category: convert]
    ConnectorOAuth

Matching MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Supplements the official Strava MCP connector by adding write access, segments, routes, photos, derived analysis, and interactive visualizations, enabling activity management, segment exploration, route export, and training analysis through MCP.
    13 npm
    MIT

Matching MCP Connectors

  • Hosted Strava MCP server that gives each user a personal URL to paste into Claude or ChatGPT. Ask about your training in plain English — pace, heart rate, overtraining, trends. More info and sign-up at https://askyourdata.health

  • Strava MCP tools for AI: athletes, activities, segments, clubs, routes. Powered by HAPI MCP server.

  • Read ONE completed activity in full detail: all stats (NP, IF, TSS, avg/max power & HR, cadence, elevation, kJ, sRPE/load), heart-rate drift at the same power (cycling only), under one of two names: `decouplingPct` with `decouplingBasis` for ONE sustained effort (Pw:Hr across its halves), or `hr_drift_across_reps` for a session with reps (effort 1 vs the last at the same watts — a direction, not a verdict: the <5% line belongs to decouplingPct and does not transfer). When neither is present, `decouplingNote` says why. `work_reps` lists each sustained rep in order with the power it was ridden at and its heart rate as `hr` (mean), `hrStart`, `hrEnd` and `hrMax` — this is the athlete's own heart-rate graph as numbers, so read it instead of asking them for a screenshot of one. Read the SHAPE, not the mean: a rep that climbs and settles and one that climbs and keeps climbing average the same, as do a rep the athlete eased off and one he did not. Rising hrEnd at unchanged watts across reps is drift; flat is an aerobically clean session whatever any percentage says. Also returned: the interval structure, the device LAP structure if the file had laps, and both notes (`note` = the athlete's, `coachNote` = your earlier read). WHICH structure to read the session by is stated by `structure_read_by`: when the athlete has set this session to Laps on the card, `structure`/`blocks` ARE the file's laps and the detection travels alongside as `structure_auto_detected` — read the version they are looking at and don't re-cut the session into intervals they rejected. Otherwise it is our detection, as `structure_detected`/`blocks_detected`, with any laps as `structure_laps` — and when both are present, NEVER report a prescribed element as not done, cut short, or skipped on the strength of its absence from the detection alone: the detection reads the trace and can miss real work, while the laps are the athlete's own thumb on the button, so check both and grade on the laps when they disagree. Each detected block carries its own CADENCE and TERRAIN — `92rpm` and `-62m/11.4km` mean the block lost 62 m over 11.4 km, i.e. a descent. Read them before attributing a power drop to fatigue: falling watts at a high cadence on a losing gradient is a rider out of gears, not a tiring one, and terrain is shown only where the net change exceeds 10 m. Use the id from list_activities. This is how you analyze how a session was actually executed (interval powers, rep consistency) before writing a coach read or adjusting the plan. Returns BOTH zone splits when the file supports them: `time_in_zone_min` is the stored measure and `time_in_zone_basis` names which quantity it is (%FTP, %threshold pace, or %maxHR) — read it before comparing this session's zone minutes with another's, because the same key is not the same quantity across activities. Two more preconditions travel with their numbers: `tss_basis` says whether a run's rTSS was grade-adjusted or read off raw pace (no altitude in the file), and `np_caveat` appears when the ride is too short for a 30-second rolling average to be stable. `hr_time_in_zone_min` is the heart-rate split, which the stored column never holds for a run — use it to tell a real physiological excursion from pace running ahead of a stale threshold mark. Its `ref` field names the maxHR the percentages are taken from; when that says it is a default rather than the athlete's measured maximum, say so instead of quoting the zones as precise. `description` is what the athlete (or the app that recorded the session) wrote on Strava / intervals.icu — on a gym session pushed from an app like Motra it holds every exercise, set, rep and weight, and since such a file carries neither power nor distance it is not a remark ABOUT the session, it IS the session: read it as the content and grade against it. list_activities flags its presence as `hasDescription`.
    ConnectorOAuth
  • Configure what a bin replies to webhook senders: HTTP status, content-type, body, custom response headers, optional delay. Body and header values support {{…}} templates rendered per-request from the INCOMING delivery — {{body.challenge}}, {{query.hub.challenge}}, {{header.x-hook-secret}}, {{hmac_sha256 body.plainToken YOUR_SECRET}} — so a bin can pass provider verification handshakes with zero code: Slack URL verification (body {{body.challenge}}), Zoom CRC (JSON with the hmac_sha256 helper), Meta/WhatsApp GET echo (text/plain {{query.hub.challenge}}), Strava (JSON {"hub.challenge":"{{query.hub.challenge}}"}), Asana (response header X-Hook-Secret: {{header.x-hook-secret}}). Only the fields you pass change; everything else keeps its current value. Works on bins created via create_bin by this same client; the incoming request is still captured in full either way.
    ConnectorNo auth
  • Compose a builder URL with a dedication pre-filled — the name shows on the runner's GPS watch and in the Strava activity title. Use after the user picks a route (find/generate) and decides who the heart is for. Pure URL builder, no server-side state.
    ConnectorNo auth
  • Convert a GPS track/route file (GPX — from Garmin, Strava exports, hiking/cycling apps, waypoints) to GeoJSON (e.g. "convert my GPS track to GeoJSON", "GPX to GeoJSON", "import my Strava route"). Returns the GeoJSON FeatureCollection as a JSON string.
    ConnectorNo auth
  • Compose a builder URL with a fundraising link pre-filled — the URL is embedded into the GPX metadata (description, filename) so it surfaces in the runner's Strava activity after they sync. CityHeart never collects the donation; the runner's donors click straight through to JustGiving / GoFundMe / Leetchi / etc.
    ConnectorNo auth
  • Convert a GPS track file (GPX) directly to KML for Google Earth — e.g. "open my Garmin/Strava track in Google Earth", "GPX to KML".
    ConnectorNo auth
  • Ponte HTTP para a API oficial de um wearable ligado à conta (Whoop, Strava ou Oura). O path segue a doc do fornecedor, ex.: Whoop "v1/cycle", Strava "api/v3/athlete", Oura "v2/usercollection/daily_activity". O vínculo OAuth é feito uma vez no app Dieta.ai.
    ConnectorNo auth
  • Primary CourseProfiler tool for creating a personalized race plan and optional PDF. Use this after obtaining both a course input and runner input. Course input may be course_file, course.source with kind=url/artifact/raw_file, or course.crsprof_artifact_id. Do not use raw_json or reconstruct/synthesize a course from roadbooks, checkpoint tables, elevation profiles, aid-station lists, or screenshots; those are enrichment/context only and are not valid course geometry. Runner input may be runner_profile_file, runner.sources, or an already-converted runner.usrprof_artifact_id. Use generate_runner_profile for user-approved evidence or uploaded .usrprof source_file artifacts; do not silently use all local files. Ask about intent only when unclear; profile_intent does not perform server-side selection. Hosted MCP cannot read local paths: use inline content/base64 or REST POST /api/artifact-uploads and pass source_file artifacts through sources, not usrprof_artifact_id. There is no raw-byte MCP upload tool. get_artifact_upload_requirements and get_runner_profile_requirements explain files, evidence, and Strava consent. If the user provides only a race name, check the CourseProfiler race catalog manifest first, but do not rely on uniqueness alone: confirm the catalog match is the same event/course/location before using its assetPath CRSProf URL. Auto-resolution only uses exact/strong catalog matches; weak matches require explicit confirmation or an explicit course.source URL/artifact. Use search_race_catalog first when the user may need to choose among multiple matching catalog courses or when the match confidence is not clearly exact/strong. If no catalog match exists, try to resolve it to a fetchable official GPX/FIT/CRSProf URL or ask the user to upload/provide the course file or URL; do not stop at the race name. Third-party route hosts such as Wikiloc may return 403 to server fetches. If an official or third-party GPX/FIT/CRSProf URL cannot be fetched or is blocked, stop and ask the user to download the official file and upload it through POST /api/artifact-uploads, then continue with the returned source_file artifact ID. Do not create a race plan until a real route file/trusted CRSProf is available. Use import_course to create a CRSProf, enrich_course_waypoints to add structured aid stations/resources/cutoffs, then generate_course_segments before creating the race plan. Catalog CRSProf files may already include official waypoints/resources/cutoffs; if they do not, call enrich_course_waypoints or ask the user for structured aid/resource/cutoff data before segmentation. If official pages and regulation PDFs disagree, or exact aid locations are not fully listed in machine-readable form, ask the user to confirm and include only confirmed aid stations; do not invent missing locations. Route-only plans are incomplete unless the user explicitly accepts missing aid/resource details. If browsing/search is available, prefer the catalog first, then official race sources and direct GPX links over generic home pages; course-only pacing is incomplete without waypoint/resource enrichment. If runner data is missing, ask for a USRProf file/artifact or runner evidence, explain that the profile drives estimated times plus insights such as uphill running limit, durability/fatigue tendencies, downhill sensitivity, and terrain strengths/weaknesses, generate a segment-evidence runner profile with generate_runner_profile after user-approved evidence selection, and do not invent personalized fitness data. This race-plan flow creates a personalized plan/PDF only; it does not submit the course to the public catalog and does not need to. Only call submit_course when the user explicitly asks to submit/add/update a course for catalog review. Returns a top-level job with artifact role metadata; use get_job to poll and get_artifact to fetch outputs.
    ConnectorNo auth
  • Generate a segment-evidence USRProf runner profile artifact from uploaded runner evidence or an existing .usrprof source. Confirm profile purpose and evidence selection only if not already explicit. Do not silently use every local file. profile_intent is advisory: the server does not filter sources. Evidence supports pacing, durability, terrain fit, uphill running limits, and confidence; get_runner_profile_requirements explains selection. Accepted evidence includes GPX/FIT/CRSProf activity files, ZIP/TAR/TAR.GZ/TGZ/TAR.XZ/TXZ archives containing those files, and .usrprof files passed as source_file artifacts from POST /api/artifact-uploads, raw_file inline content/base64, or fetchable HTTPS URLs. Archives must use purpose runner_evidence, are expanded server-side, and report skipped nested archives, duplicate contents, unsupported entries, and parse failures by filename/path. For Strava, call build_runner_profile_from_strava and never ask for credentials or tokens. Follow its browser-consent/job flow. Pass the generated usrprof artifact ID to create_race_plan as runner.usrprof_artifact_id.
    ConnectorNo auth
  • Build a USRProf from Strava activities selected for a target course or distance. Ask the user for the target course or distance and, when an existing profile is supplied, explicitly ask whether to merge or replace. Strava credentials are never accepted through MCP: this tool returns a private one-hour browser authorization URL and resumes the same job after authorization. If evidence is insufficient, relay the structured user decision and resume the same job with build_anyway, broaden_filters, or cancel.
    ConnectorNo auth
  • Fetch Strava's public challenge gallery, including its featured challenge and sections with each challenge's goal and duration. Use strava_club for club details or strava_routes for route records.
    ConnectorNo auth
  • Fetch a Strava club's public profile, including its name, location, membership count, and images; private member, discussion, leaderboard, and activity data are unavailable without login. Use strava_routes for route recommendations or strava_challenges for the public challenge gallery.
    ConnectorNo auth
  • Returns a single Strava route's detail: type, difficulty, distance, elevation gain, estimated time, and summary. `path` is the relative route path returned by `/strava/routes` results (e.g. `hiking/usa/colorado/boulder/mallory-cave_5171952737974445730`). Public data, sourced from Strava's own server-rendered route pages. Use strava_routes to retrieve strava route-index listing for a sport, country, and region.
    ConnectorNo auth
  • List public Strava route recommendation records for a sport and region, one page at a time. Use strava_route_detail with a returned route path when you need one route's distance, elevation, or summary.
    ConnectorNo auth
  • Fetch Strava's public challenge gallery, including its featured challenge and sections with each challenge's goal and duration. Use strava_club for club details or strava_routes for route records.
    ConnectorNo auth