Strava MCP vs Turnale

A side-by-side look at the Strava MCP and Turnale MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Strava MCP logoStrava MCPSports · Local subprocess (stdio)A Model Context Protocol (MCP) server that connects to Strava API, providing tools to access Strava data through LLMs67GreatAuth: oauth 2.0Turnale logoTurnaleSports · Remote HTTP/SSERun racket-sport tournaments from your AI assistant: fair draws, scores, live standings.67GreatAuth: no auth required

Verdict: choose Strava MCP for sports work as a local process; choose Turnale for sports over a hosted endpoint. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Strava MCP logoChoose Strava MCP when

  • You need dedicated capabilities in the Sports domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: OAuth 2.0.
  • You want tools like get-athlete-profile, get-athlete-stats, get-activity-details.
Explore Strava MCP

Turnale logoChoose Turnale when

  • You need dedicated capabilities in the Sports domain.
  • You prefer a remote HTTP/SSE transport.
  • Its auth model fits you: No auth required.
  • You want tools like ping, create_tournament, add_players.
Explore Turnale

Feature & specification comparison

Rows where the two servers differ are marked.

SpecStrava MCP logoStrava MCPTurnale logoTurnale
CategorySportsSports
Quality signal67/100 · Great67/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Remote HTTP/SSE
AuthOAuth 2.0No auth required
PricingBYOK (pay the provider)Not declared
Required env varsNone listedNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars5000
Directory activity 2 views 0 installs 0 upvotes 1 views 0 installs 0 upvotes
Tools2430

Tools & capabilities

Strava MCP tools 24

  • get-athlete-profileFetches the profile information for the authenticated athlete, including their unique numeric ID needed for other tools like get-athlete-stats.
  • get-athlete-statsFetches the activity statistics (recent, YTD, all-time) for a specific athlete using their ID. Requires the athleteId obtained from the get-athlete-profile tool.
  • get-activity-detailsFetches detailed information about a specific activity using its ID.
  • get-recent-activitiesFetches the most recent activities for the authenticated athlete.
  • list-athlete-clubsLists the clubs the authenticated athlete is a member of.
  • list-starred-segmentsLists the segments starred by the authenticated athlete.
  • get-segmentFetches detailed information about a specific segment using its ID.
  • explore-segmentsSearches for popular segments within a given geographical area.
  • star-segmentStars or unstars a specific segment for the authenticated athlete.
  • get-segment-effortFetches detailed information about a specific segment effort using its ID.
  • list-segment-effortsLists the authenticated athlete's efforts on a specific segment, optionally filtering by date.
  • list-athlete-routesLists the routes created by the authenticated athlete, with pagination.
  • +12 more on the listing page

Turnale tools 30

  • pingHealth check. Returns a static confirmation that the Turnale MCP server is reachable.
  • create_tournamentCreate a new tournament. Keep setup SHORT: ask the organiser only for sport, players, court count and start time — sensible defaults cover everything else. FORMAT: never ask an open 'which format?' question. If the organiser clearly named one, pass it; otherwise omit format — the call then returns a ready-to-show menu of options (nothing is created) for you to relay so the organiser can read and choose in one reply. Players can be added later with add_players. NEVER invent placeholder or fake player names ('Player 1', made-up names): if the organiser only knows the headcount, create with signup_open: true and signup_cap set to it — players add themselves by name via the page link. If the organiser gives a time budget instead of rounds (e.g. 'we have 2 hours'), derive rounds ≈ total minutes ÷ (match + break minutes) and confirm. If they ask for a format that is not listed, offer to note it with record_feedback. Returns the organiser key (tk_…): relay it with the warning that it cannot be recovered, plus the shareable page link.
  • add_playersAdd players to the roster in bulk (parse pasted lists or spreadsheets yourself and send structured entries — never invent placeholder names; use signup mode when names aren't known yet). Duplicate names are rejected for disambiguation. If an unlocked draw exists it is regenerated automatically. Americano/mexicano take late arrivals even after results exist: americano rebuilds the rounds nobody has started, mexicano pairs them into the next round.
  • update_playerRename a player or set their gender/level/note. Updates MANY in one call: pass `updates` with one object per player and never loop one-by-one — setting levels for a whole roster used to be one call per player, which on a phone meant approving each one and left the roster half-updated when some were mis-tapped. The whole batch applies or none of it does.
  • remove_playerRemove one or MANY players before any result is recorded (afterwards use withdraw_player or replace_player) — pass player_names to clear several in one call, never loop one-by-one. Regenerates an existing unlocked draw.
  • set_pairsFix the doubles pairs: pass explicit pairs by name, or auto-pair (random or level-balanced). Only before results exist. Regenerates an existing unlocked draw.
  • update_settingsChange the tournament name, start time, match duration, break/changeover minutes, courts (count or names), house rules, or courtside score entry from the page. Court changes recompute the remaining schedule; played matches never move.
  • promote_playerMove a waitlisted player onto the active roster when a spot opens (signed-in players are notified by email). The cap can be raised with update_settings. Once results exist only americano/mexicano can take them — the unstarted rounds follow the roster.
  • generate_drawGenerate (or regenerate) the draw and schedule. This IS the start action: the first draw moves the tournament from setup to active and closes self-signup — when the organiser says "start the tournament", call this. The result includes rounds_text — SHOW it to the organiser as-is, in whatever language they are writing to you in (it is English already, so relay it unchanged unless they are writing something else) so they can check who plays whom — and the seed that produced the draw: preview first, then confirm with that SAME seed to apply exactly the previewed draw. Free until the first result is recorded; after that this DISCARDS recorded results and requires BOTH confirm: true and discard_results: true. If the organiser asks for a format that is not supported, offer to note it with record_feedback. Optional overrides adjust the format first.
  • get_briefingCompact full state of the tournament — settings, roster, progress, next matches, standings, page link. Call this first when resuming work in a new conversation with just the key.
  • list_playersFull roster with status, level, and doubles partner.
  • list_matchesMatches with sides, scores, courts and times. Filter by state or round; paginate with after_match_number for large tournaments.
  • +18 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Strava MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "r-huijts-strava-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@r-huijts/strava-mcp-server"
      ]
    }
  }
}

Turnale

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "turnale-2": {
      "url": "https://mcp.turnale.app"
    }
  }
}

Frequently asked questions

Strava MCP is categorized under Sports and uses a local stdio subprocess. Turnale belongs to Sports and uses a remote HTTP/SSE transport. Pick Strava MCP for sports work and Turnale for sports.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Strava MCP is bring-your-own-key: usage is billed by the API provider you supply a key for. Auth: oauth 2.0. Turnale has no declared pricing — check the project's own site. Auth: no auth required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add r-huijts-strava-mcp and turnale-2 as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Strava MCP has a quality signal of 67/100 (Great) with 2 views, 0 installs and 500 GitHub stars. Turnale has 67/100 (Great) with 1 views, 0 installs and 0 GitHub stars.