{
  "data": {
    "a": {
      "slug": "ride-with-gps",
      "name": "Ride with GPS API",
      "vendor": "Ride with GPS, Inc.",
      "vendorUrl": "https://ridewithgps.com",
      "kind": "http-api",
      "category": "hobbies",
      "summary": "Ride with GPS is a cycling route planning and navigation service. Its v1 REST API reads and writes a person's routes, trips, collections and events, uploads GPS files, and runs club member, event, experience and point-of-interest tools for organisation accounts.",
      "url": "https://www.anchorterminal.com/tools/ride-with-gps",
      "markdownUrl": "https://www.anchorterminal.com/tools/ride-with-gps.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/ride-with-gps.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/ride-with-gps.json",
      "dns": "ride-with-gps.grade.anchorterminal.com",
      "license": "Proprietary service under the Ride with GPS API Terms of Service (effective 11 September 2026)",
      "transports": [
        "http"
      ],
      "packages": [],
      "auth": "mixed",
      "authNotes": "An API client, created on the API clients page after a browser signup, gives an api_key sent as x-rwgps-api-key. OAuth 2.0 authorisation code flow (https://ridewithgps.com/oauth/authorize, token at /oauth/token.json, revoke at /oauth/revoke.json) returns a Bearer token with scope `user`; no PKCE, expiry or refresh token is documented. Basic auth uses an auth token minted from the account email and password at POST /api/v1/auth_tokens.json, or created in the dashboard for organisation accounts, with no documented expiry or revocation (https://ridewithgps.com/api/v1/doc/authentication).",
      "pricing": "freemium",
      "pricingNotes": "The API is free with no paid plan or approval, per the API terms. A free Starter account suffices for a client. Basic ($9.99 a month or $59.99 a year) and Premium ($12.99 a month or $79.99 a year, 7-day trial) per ridewithgps.com/llms.txt and the App Store listing; the pricing page shows the tiers without figures to our reader. Organisation accounts, which the member, event, experience and point-of-interest endpoints need, are priced by email to organizations@ridewithgps.com.",
      "priceSummary": "$9.99 / mo",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API docs, OpenAPI file, API terms or llms.txt (checked 3 November 2026).",
        "endpoints": []
      },
      "toolCount": 0,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-03"
      },
      "docsUrl": "https://ridewithgps.com/api/v1/doc",
      "llmsTxt": "https://ridewithgps.com/llms.txt",
      "openapi": "https://ridewithgps.com/api/v1/openapi.yaml",
      "capabilities": [
        "hobbies.routes",
        "hobbies.activities",
        "hobbies.events"
      ],
      "tags": [
        "hosted",
        "oauth",
        "api-key",
        "openapi",
        "llms-txt",
        "free-tier",
        "no-card",
        "webhooks",
        "closed-source",
        "cycling"
      ],
      "lastRelease": "2026-10-14",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 45.2,
        "grade": "E",
        "agentReady": false,
        "rank": 1139,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 2,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 57,
          "maintenance": 60,
          "payments": 30,
          "reliability": 24,
          "schema": 72,
          "security": 30,
          "transparency": 59
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-03"
        },
        "negative": 0,
        "verdict": "A free, documented REST API with a public OpenAPI file, OAuth, filters and pagination on routes and trips, GPS uploads as polled tasks, and a change log updated five times since August 2026. There is no status page, no rate limit figure, no read-only scope, and the organisation-only endpoints need an account priced by email.",
        "bestFor": "An agent planning or reading cycling routes and rides for a consenting person, or running a club's calendar from an organisation account.",
        "strengths": [
          "Public OpenAPI 3.0.1 file with 34 paths and 61 operations, plus an llms.txt that states the plans and prices",
          "API terms of 11 September 2026 allow commercial use with no fee, approval or attribution",
          "Routes and trips can be created from GPX, TCX, FIT or KML uploads and exported in the same formats, with page_size up to 200 and distance, elevation, visibility and archived filters",
          "HMAC-SHA256 signed webhooks for route and trip changes, with a 100-notification batch and item URLs to fetch",
          "Change log entries on 10 August, 3 September, 11 September, 6 October and 14 October 2026"
        ],
        "weaknesses": [
          "No status page or incident history; status.ridewithgps.com redirects to the home page",
          "No rate limit figures, no 429 documented, and no idempotency keys on the 30 write operations",
          "OAuth has a single `user` scope with no read-only option, no PKCE and no documented token expiry; basic auth tokens come from the account password",
          "The 23 March 2026 change to route activity_types was breaking, with a migration map but no notice period",
          "Member, event, experience and point-of-interest endpoints need an organisation account priced by email"
        ],
        "agentNotes": [
          "Send x-rwgps-api-key on every request and either x-rwgps-auth-token or `Authorization: Bearer`; ask the person for OAuth consent rather than their password",
          "Append .json to endpoints or set `content-type: application/json`, and read the root key named after the resource (`route`, `trip`)",
          "Page list endpoints with page and page_size (20 to 200) and stop when meta.pagination.next_page_url is null; add privacy_code for non-public items",
          "After POST /api/v1/routes.json with a file, poll GET /api/v1/tasks/{id}.json until the task completes; a package build returns 409 while one is running",
          "Treat every delete as final and unconfirmed, since the API has no read-only scope or idempotency key, and back off on failures as the terms ask"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 45.2
          }
        ],
        "editorialScores": {
          "ergonomics": 57,
          "maintenance": 60,
          "payments": 30,
          "reliability": 24,
          "schema": 72,
          "security": 30,
          "transparency": 43
        },
        "provenanceScore": 74,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-03",
            "maintenance": "2026-11-03",
            "payments": "2026-11-03",
            "reliability": "2026-11-03",
            "schema": "2026-11-03",
            "security": "2026-11-03",
            "transparency": "2026-11-03"
          },
          "last": "2026-11-03",
          "oldest": "2026-11-03",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -H \"x-rwgps-api-key: \u003cAPI_KEY\u003e\" -H \"x-rwgps-auth-token: \u003cAUTH_TOKEN\u003e\" \"https://ridewithgps.com/api/v1/routes.json?page_size=20\""
      },
      "letme": {
        "capability": "https://letme.dev/hobbies.routes",
        "tool": "https://letme.dev/ride-with-gps"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Basic plan",
          "unit": "month",
          "usd": 9.99,
          "note": "$59.99 a year; the API itself is free"
        },
        {
          "item": "Premium plan",
          "unit": "month",
          "usd": 12.99,
          "note": "$79.99 a year, 7-day trial"
        }
      ],
      "provenance": {
        "legalEntity": "Ride with GPS, Inc.",
        "domain": "ridewithgps.com",
        "domainRegistered": "2007-04-16",
        "endpointOnVendorDomain": true,
        "terms": "https://ridewithgps.com/api/v1/doc/terms",
        "privacy": "https://ridewithgps.com/privacy",
        "statusPage": "",
        "changelog": "https://ridewithgps.com/api/v1/doc/change_log",
        "securityTxt": "none",
        "checked": "2026-11-03",
        "notes": [
          "Ride with GPS, Inc, a Delaware corporation, is named in the terms of service effective 1 July 2026. The App Store lists the seller as Ride with GPS LLC. The privacy policy (last updated 31 July 2026) names no entity.",
          "API Terms of Service effective 11 September 2026 supplement the general terms. Neither forbids automated access; the API terms ask for responsible traffic and say unusual traffic should be discussed first.",
          "ridewithgps.com/robots.txt disallows raw track exports, route and trip JSON, cue sheets, elevation profiles and images for every agent, none of which was fetched; the API documentation paths are allowed. changelog.ridewithgps.com allows all. support.ridewithgps.com answered 403.",
          "status.ridewithgps.com answers 301 to the home page. /.well-known/security.txt returns 404.",
          "RDAP (Verisign) gives ridewithgps.com a creation date of 16 April 2007."
        ],
        "score": 74
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/ride-with-gps.json",
      "live": {
        "slug": "ride-with-gps",
        "securityTxt": {
          "url": "https://ridewithgps.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-04T15:54:43.62212682Z"
        },
        "updatedAt": "2026-11-04T15:54:43.62212682Z"
      }
    },
    "answer": "Strava MCP Connector + API and Ride with GPS API score within a point of each other on agent readiness, 45.8 (E) and 45.2 (E). Ride with GPS API leads on schema \u0026 documentation, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community.",
    "b": {
      "slug": "strava",
      "name": "Strava MCP Connector + API",
      "vendor": "Strava, Inc.",
      "vendorUrl": "https://www.strava.com",
      "kind": "mcp",
      "category": "hobbies",
      "summary": "Strava's MCP Connector is a hosted, read-only MCP server that gives a Strava subscriber's AI assistant access to their own activity history, fitness trends, gear and best efforts. The V3 REST API reaches the same data for registered developer apps.",
      "url": "https://www.anchorterminal.com/tools/strava",
      "markdownUrl": "https://www.anchorterminal.com/tools/strava.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/strava.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/strava.json",
      "dns": "strava.grade.anchorterminal.com",
      "license": "Proprietary service under the Strava API Agreement (updated 1 June 2026) and the Strava terms, neither read because www.strava.com disallows our reader",
      "transports": [
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.strava.com/mcp",
      "packages": [],
      "auth": "oauth",
      "authNotes": "The MCP Connector needs a Strava subscription. The client opens a browser where the person signs in and approves access, and the connection is read-only and scoped to that account, revocable under Settings, My Apps (https://support.strava.com/en-us/articles/15401531-strava-mcp-connector). The V3 API uses OAuth 2.0 with seven scopes (`read`, `read_all`, `profile:read_all`, `profile:write`, `activity:read`, `activity:read_all`, `activity:write`), 6-hour access tokens and rotating refresh tokens; creating an app at strava.com/settings/api needs a subscription, new apps start in single-player mode, self-upgrade to 10 athletes, and more needs a review (https://developers.strava.com/docs/authentication/).",
      "pricing": "paid",
      "pricingNotes": "A Strava subscription is required for the MCP Connector and for Standard Tier API apps, with no further fee for API access per the Developer FAQ (https://communityhub.strava.com/developers-knowledge-base-14/strava-api-faq-12906). The subscription price is on www.strava.com, which robots.txt disallows for our reader, so no figure is recorded.",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the MCP support articles, the Swagger file or the changelog (checked 3 November 2026). Access is by subscription and OAuth.",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-03"
      },
      "docsUrl": "https://developers.strava.com/docs/",
      "openapi": "https://developers.strava.com/swagger/swagger.json",
      "capabilities": [
        "hobbies.activities",
        "hobbies.routes"
      ],
      "tags": [
        "hosted",
        "mcp",
        "remote-mcp",
        "oauth",
        "read-only-mode",
        "paid",
        "subscription",
        "approval-required",
        "status-page",
        "openapi",
        "closed-source"
      ],
      "lastRelease": "2026-10-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 45.8,
        "grade": "E",
        "agentReady": false,
        "rank": 1125,
        "ranked": true,
        "rankOf": 1349,
        "categoryRank": 1,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 49,
          "maintenance": 40,
          "payments": 0,
          "reliability": 63,
          "schema": 50,
          "security": 48,
          "transparency": 59
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-03"
        },
        "negative": 0,
        "verdict": "The MCP Connector is the surface Strava sanctions for an AI assistant, read-only, scoped to one subscriber's account, with its own status component. Its tool list and rate limits are not public, the API Agreement and prices sit on a host our reader could not fetch, and apps serving more than 10 athletes need a review that refuses AI tools.",
        "bestFor": "A personal assistant reading one subscriber's training history with consent.",
        "strengths": [
          "Official hosted MCP server at https://mcp.strava.com/mcp, read-only, scoped to the subscriber's own account and revocable under Settings, My Apps",
          "status.strava.com has separate API and MCP Connector components, and no MCP incident appears between 4 August and 3 November 2026",
          "V3 API with a public Swagger 2.0 file, seven OAuth scopes, 6-hour access tokens and documented rate-limit headers",
          "Dated API changelog with notice periods, such as the 1 June 2026 announcement of the 1 September 2026 endpoint removals",
          "Webhooks for activity and deauthorisation events, so an app need not poll"
        ],
        "weaknesses": [
          "The MCP tool list, schemas and rate-limit numbers are not published; they are only visible after OAuth, which we did not run",
          "A Strava subscription is needed for the connector and for Standard Tier API apps, and the price is on a page our reader could not fetch",
          "API apps that expose athlete data to third-party AI tools are not approved beyond 10 athletes, and intermediary platforms are non-compliant",
          "The API Agreement, terms, privacy policy and any security.txt are on www.strava.com, which disallows our reader, so none was read",
          "No official SDKs, no llms.txt and no entry in the official MCP registry"
        ],
        "agentNotes": [
          "Connect with `claude mcp add --transport http strava-mcp https://mcp.strava.com/mcp` and have the subscriber complete the OAuth consent in the browser; a free account is refused",
          "Expect reads only. The connector cannot create, edit or delete activities, so hand uploads to the person or to an app with the `activity:write` scope",
          "On the V3 API, watch X-RateLimit-Usage against 200 per 15 minutes and 2,000 a day, and use webhooks rather than polling; a 429 carries no Retry-After",
          "Do not route Strava API data through another AI tool for an app serving more than 10 athletes; the Developer FAQ says such apps are not approved",
          "Move V3 calls to https://api-v3.strava.com after 4 January 2027 and use POST /oauth/revoke, since the legacy deauthorise endpoint ends on 1 June 2027"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 45.8
          }
        ],
        "editorialScores": {
          "ergonomics": 49,
          "maintenance": 40,
          "payments": 0,
          "reliability": 63,
          "schema": 50,
          "security": 48,
          "transparency": 31
        },
        "provenanceScore": 86,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-03",
            "maintenance": "2026-11-03",
            "payments": "2026-11-03",
            "reliability": "2026-11-03",
            "schema": "2026-11-03",
            "security": "2026-11-03",
            "transparency": "2026-11-03"
          },
          "last": "2026-11-03",
          "oldest": "2026-11-03",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -H \"Authorization: Bearer \u003cACCESS_TOKEN\u003e\" \"https://www.strava.com/api/v3/athlete/activities?per_page=30\"",
        "claudeCode": "claude mcp add --transport http strava-mcp https://mcp.strava.com/mcp",
        "config": {
          "mcpServers": {
            "strava": {
              "type": "http",
              "url": "https://mcp.strava.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/hobbies.activities",
        "tool": "https://letme.dev/strava"
      },
      "area": "everyday",
      "provenance": {
        "legalEntity": "Strava, Inc.",
        "domain": "strava.com",
        "domainRegistered": "2003-12-22",
        "endpointOnVendorDomain": true,
        "terms": "https://www.strava.com/legal/api",
        "privacy": "https://www.strava.com/legal/privacy",
        "statusPage": "https://status.strava.com",
        "changelog": "https://developers.strava.com/docs/changelog/",
        "securityTxt": "unknown",
        "checked": "2026-11-03",
        "notes": [
          "Strava, Inc. is the name in the footer of press.strava.com. The terms and privacy policy on www.strava.com were not read.",
          "www.strava.com/robots.txt disallows ClaudeBot (with Google-Extended, GPTBot and Meta-ExternalAgent) for the whole site and does not name Claude-User or Claude-SearchBot; its wildcard group disallows /api/ and athlete, activity and route pages. Nothing on that host was fetched. developers.strava.com has no robots.txt, press.strava.com allows everything, status.strava.com disallows /api/ and /embed/, support.strava.com and communityhub.strava.com allow the pages read.",
          "The API Agreement link in the docs is strava.com/legal/api, which the rate-limits page says was updated on 1 June 2026. Not read.",
          "security.txt on www.strava.com could not be requested, so its state is unknown. developers.strava.com/llms.txt returns 404.",
          "RDAP (Verisign) gives strava.com a creation date of 22 December 2003."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/strava.json",
      "live": {
        "slug": "strava",
        "probe": {
          "target": "https://mcp.strava.com/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-11-04T20:05:28.146763239Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 349,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 383,
          "p95ms24h": 492,
          "samples24h": 48,
          "samples30d": 48,
          "days": [
            {
              "date": "2026-11-04",
              "probes": 48,
              "ok": 48
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.strava.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-04T20:05:56.603604923Z"
        },
        "securityTxt": {
          "url": "https://strava.com/.well-known/security.txt",
          "state": "expired",
          "expires": "2026-10-31T00:00:00.000Z",
          "checkedAt": "2026-11-04T15:53:17.989248718Z"
        },
        "updatedAt": "2026-11-04T20:05:56.603604923Z"
      }
    },
    "edges": [
      {
        "by": 39,
        "category": "reliability",
        "leads": "strava",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the hosted lines. No status page, since status.ridewithgps.com answers 301 to the home page and the docs link none (0). No readable incident history (5). The API terms of 11 September 2026 say no fixed request limits currently apply and ask for caching, webhooks and backing off, so there are no numbers to publish (5 of 15). No 429 is documented in the docs or the OpenAPI file; the terms ask clients to back off on failures, uploads run as tasks to poll, and no idempotency key exists for the 30 write operations (4 of 15). No SLA (0). v1 is the current and only version with no beta label (10). 0 + 5 + 5 + 4 + 0 + 10 = 24.",
          "b": "Read with the hosted lines on the MCP Connector, the surface Strava sanctions for an assistant, with the V3 API where the connector publishes nothing. status.strava.com on Atlassian Statuspage lists Mobile applications, Strava.com, API, Upload, AWS and MCP Connector components with a history feed (20). From 4 August to 3 November 2026 the feed has 15 resolved incidents. None touches the MCP Connector; the API component had Beacon failures for 48 minutes on 23 October; activity uploads were degraded for 3 hours 7 minutes on 27 September with the mobile app unavailable for most users, and Garmin uploads were delayed twice. For the graded surface that reads as minor incidents only (20). API limits are published with numbers (200 per 15 minutes and 2,000 a day, 100 and 1,000 for reads, doubled after the self-service upgrade); the MCP article says limits per minute and per day exist and gives none (8 of 15). The API returns 429 with a JSON error and X-RateLimit-Usage headers and asks callers to throttle, with no Retry-After, and the connector is read-only, so retries are safe; nothing on MCP overload (5 of 15). No SLA (0). The connector launched on 1 June 2026 and carries no beta label (10). 20 + 20 + 8 + 5 + 0 + 10 = 63."
        },
        "scores": {
          "a": 24,
          "b": 63
        }
      },
      {
        "by": 30,
        "category": "payments",
        "leads": "ride-with-gps",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "Read with the hosted rubric. No x402, MPP or L402 (0). The API is free under the terms and the plan prices are stated in llms.txt and the App Store listing, but the pricing page shows no figures to our reader and organisation accounts, which the member, event, experience and point-of-interest endpoints need, are priced by email (10 of 20). A free Starter account and a free API client with no card (20). A person signs up and creates the API client in a browser, and basic auth tokens need the account password (0). 0 + 10 + 20 + 0 = 30.",
          "b": "Read with the hosted rubric. No x402, MPP or L402 (0). A subscription is required and the FAQ says it carries no extra API fee, but the price is on www.strava.com, which robots.txt disallows for our reader, so the pricing line is scored absent and named in openQuestions (0 of 20). No free tier for the connector or for Standard Tier apps, and any subscription trial sits on the unread host (0 of 20). A person subscribes and completes OAuth in a browser (0). 0 + 0 + 0 + 0 = 0."
        },
        "scores": {
          "a": 30,
          "b": 0
        }
      },
      {
        "by": 22,
        "category": "schema",
        "leads": "ride-with-gps",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "Public OpenAPI 3.0.1 file with 34 paths, 61 operations and 41 schemas (25). ridewithgps.com/llms.txt describes the product and plans but links no Markdown docs, and the documentation is HTML (5 of 10). Operation descriptions say which endpoints are organisation-only, that uploads and package builds return a task to poll, how experience codes replace each other and that deleting a member keeps their account; little on when not to use an operation (14 of 20). 18 enums, required fields and defaults in the file, but the Error schema is an array of strings (10 of 15). One example in the OpenAPI file, request and pagination examples on the docs pages, and a table of HTTP codes with the `errors` array shape (8 of 15). One version in the path, a rule that only incompatible changes create a new version, and a dated change log back to January 2025 (15). 25 + 5 + 14 + 10 + 8 + 15 = 72.",
          "b": "A public Swagger 2.0 file describes the V3 API (29 paths, 31 operations, 7 OAuth scopes). The MCP tool definitions are only visible after OAuth, which we did not run, so the contract line is scored on the API half (15 of 25). No llms.txt on developers.strava.com (404) and no Markdown docs (0). The support article names the data the connector reads (activity history, fitness trends, cross-sport insights, gear, best efforts, weather, streaks) and the Swagger descriptions state each operation's purpose and scope; no when-not-to-use guidance and no tool descriptions read (6 of 20). The Swagger file has enums for upload data_type, stream keys and explore activity_type and marks required parameters; one PUT /athlete parameter is declared in the path with no placeholder; MCP inputs unread (6 of 15). Most 200 responses carry examples, errors return a Fault object, 429 is not in the file, and the rate-limits page documents the 429 body (8 of 15). A dated changelog on developers.strava.com with removals announced three months ahead (15). 15 + 0 + 6 + 6 + 8 + 15 = 50."
        },
        "scores": {
          "a": 72,
          "b": 50
        }
      },
      {
        "by": 20,
        "category": "maintenance",
        "leads": "ride-with-gps",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "Read for a closed service. The newest change log entry is 14 October 2026 (30). Five dated entries since 4 August 2026, on 10 August, 3 September, 11 September, 6 October and 14 October (20). A dated change log, developers@ridewithgps.com and a Zendesk help centre that answered 403 to our reader; replies were not tested (10 of 15). No official SDK and no entry in the official MCP registry (0 of 15). No package or CI to judge (0 of 10). 30 + 20 + 10 + 0 + 0 = 60.",
          "b": "Read for a closed service. Gemini support for the connector arrived on 28 October 2026, and the API changelog's newest entry is 1 September 2026 (30). In the 90 days to 3 November, dated changes are the 1 September endpoint removals and the 28 October Gemini release; the 18 September FAQ is a document, not a change, so three are not established (0 of 20). A dated changelog, a Developer FAQ on the Community Hub (closed to replies), a developer forum there and a support site (10 of 15). No entry in the official MCP registry under a strava.com namespace and no official SDKs, only Swagger Codegen (0 of 15). No package or CI to assess (0 of 10). 30 + 0 + 10 + 0 + 0 = 40."
        },
        "scores": {
          "a": 60,
          "b": 40
        }
      },
      {
        "by": 18,
        "category": "security",
        "leads": "strava",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "OAuth 2.0 authorisation code flow with one scope, `user`, and a revoke endpoint, but no PKCE, expiry or refresh token is documented; basic auth tokens are minted from the account email and password with no documented expiry or revocation; credentials travel in headers (18 of 30). No read-only scope, and the 30 write operations, including deletes of routes, events, members and experiences, need no confirmation (4 of 20). Route names, descriptions, event text and experience messages are user content with no guidance on treating them as untrusted (5 of 15). The API clients page lists clients and tokens; no call log is documented (3 of 15). /.well-known/security.txt returns 404, and no disclosure policy, bug bounty or certification was found (0 of 20). 18 + 4 + 5 + 3 + 0 = 30.",
          "b": "OAuth 2.0 with seven scopes, 6-hour access tokens, rotating refresh tokens that invalidate the previous one, and POST /oauth/revoke with Basic auth; the connector's consent is in the browser and revocable under My Apps. The token endpoint's parameter table lists client_secret, refresh_token and access_token as query parameters, a documented option that costs 10 (20 of 30). The connector is read-only and scoped to one account, and the API splits read, read_all and write scopes by resource; no confirmation step exists for `activity:write` (18 of 20). Activity titles, descriptions, comments and club posts are user text the connector returns, with no guidance on treating them as untrusted (5 of 15). My Apps lists connected apps for revocation and the API dashboard shows rate-limit usage; no per-call log (5 of 15). security.txt, a disclosure policy, a bug bounty and certifications would sit on www.strava.com, which our reader could not fetch, and the support article's \"security and quality guardrails\" is a claim; scored absent and named in openQuestions (0 of 20). 20 + 18 + 5 + 5 + 0 = 48."
        },
        "scores": {
          "a": 30,
          "b": 48
        }
      },
      {
        "by": 8,
        "category": "ergonomics",
        "leads": "ride-with-gps",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "No field selection; polylines and track files sit on separate endpoints and page_size runs from 20 to 200 (12 of 25). page and page_size with meta.pagination, filters for name, visibility, distance, elevation gain, archived and stationary, and privacy_code for non-public items (20). Errors carry HTTP codes and an `errors` array of messages with no codes to branch on (10 of 20). Reads are safe to repeat and package builds return 409 while one runs, but no idempotency key covers creates, and deletes are not confirmed (8 of 20). Two headers and a .json suffix are all a request needs, with no official SDK (7 of 15). 12 + 20 + 10 + 8 + 7 = 57.",
          "b": "The connector's tool count and definition sizes are not public, so context cost is scored as unknown (10 of 25). The API pages with page and per_page up to 200, before and after timestamps on activities and a cursor on comments; stream keys select channels; whether the MCP tools size their output is unread (12 of 20). API errors return a Fault object with a message and a 429 JSON error, with no error codes list; MCP errors unread (8 of 20). The connector is read-only, so every call is safe to repeat, and the API's reads are too; no idempotency key on uploads and no annotations read (12 of 20). Setup is one `claude mcp add` command plus browser consent; the API has sensible defaults but no official SDKs, only Swagger Codegen (7 of 15). 10 + 12 + 8 + 12 + 7 = 49."
        },
        "scores": {
          "a": 57,
          "b": 49
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "MCP server",
        "name": "Kind"
      },
      {
        "a": "Ride with GPS, Inc.",
        "b": "Strava, Inc.",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://mcp.strava.com/mcp",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the Ride with GPS API Terms of Service (effective 11 September 2026)",
        "b": "Proprietary service under the Strava API Agreement (updated 1 June 2026) and the Strava terms, neither read because www.strava.com disallows our reader",
        "name": "Licence"
      },
      {
        "a": "0",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-14",
        "b": "2026-10-28",
        "name": "Last release"
      },
      {
        "a": "2026-09-11",
        "b": "2026-06-01",
        "name": "Terms last updated"
      },
      {
        "a": "2026-07-31",
        "b": "2026-01-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "yes, with an opt-out",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      }
    ],
    "faq": [
      {
        "answer": "Strava MCP Connector + API and Ride with GPS API score within a point of each other on agent readiness, 45.8 (E) and 45.2 (E). Ride with GPS API leads on schema \u0026 documentation, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community.",
        "question": "Which is better for AI agents, Ride with GPS API or Strava MCP Connector + API?"
      },
      {
        "answer": "Ride with GPS API takes an API key or an OAuth sign-in. Strava MCP Connector + API uses an OAuth sign-in.",
        "question": "Do Ride with GPS API and Strava MCP Connector + API need an API key?"
      },
      {
        "answer": "No hosted endpoint is listed for Ride with GPS API. Strava MCP Connector + API has a hosted endpoint at https://mcp.strava.com/mcp.",
        "question": "Can an agent call Ride with GPS API and Strava MCP Connector + API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 72 against 50",
          "Agent ergonomics, 57 against 49",
          "Payments \u0026 pricing, 30 against 0",
          "Maintenance \u0026 community, 60 against 40"
        ],
        "also": [
          "Free to start without a card"
        ],
        "goodFor": "An agent planning or reading cycling routes and rides for a consenting person, or running a club's calendar from an organisation account.",
        "slug": "ride-with-gps",
        "watchFor": "No status page or incident history; status.ridewithgps.com redirects to the home page"
      },
      {
        "aheadOn": [
          "Reliability, 63 against 24",
          "Security \u0026 auth, 48 against 30"
        ],
        "also": [
          "A hosted endpoint, with nothing to install"
        ],
        "goodFor": "A personal assistant reading one subscriber's training history with consent.",
        "slug": "strava",
        "watchFor": "The MCP tool list, schemas and rate-limit numbers are not published; they are only visible after OAuth, which we did not run"
      }
    ],
    "history": null,
    "job": {
      "capability": "hobbies.routes",
      "name": "Hobbies routes"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/ride-with-gps-vs-ticketmaster.json",
        "title": "Ride with GPS API vs Ticketmaster Discovery API",
        "url": "https://www.anchorterminal.com/compare/ride-with-gps-vs-ticketmaster"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 39,
        "edge": "strava",
        "key": "reliability",
        "name": "Reliability",
        "ride-with-gps": 24,
        "strava": 63,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 22,
        "edge": "ride-with-gps",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "ride-with-gps": 72,
        "strava": 50,
        "weight": 13
      },
      {
        "by": 8,
        "edge": "ride-with-gps",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "ride-with-gps": 57,
        "strava": 49,
        "weight": 13
      },
      {
        "by": 18,
        "edge": "strava",
        "key": "security",
        "name": "Security \u0026 auth",
        "ride-with-gps": 30,
        "strava": 48,
        "weight": 14
      },
      {
        "by": 30,
        "edge": "ride-with-gps",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "ride-with-gps": 30,
        "strava": 0,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 20,
        "edge": "ride-with-gps",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "ride-with-gps": 60,
        "strava": 40,
        "weight": 7
      },
      {
        "by": 0,
        "edge": "",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "ride-with-gps": 59,
        "strava": 59,
        "weight": 7
      }
    ],
    "summary": "Strava MCP Connector + API and Ride with GPS API score within a point of each other on agent readiness, 45.8 (E) and 45.2 (E). Ride with GPS API leads on schema \u0026 documentation, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community. Both do hobbies routes.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "ride-with-gps": "A free, documented REST API with a public OpenAPI file, OAuth, filters and pagination on routes and trips, GPS uploads as polled tasks, and a change log updated five times since August 2026. There is no status page, no rate limit figure, no read-only scope, and the organisation-only endpoints need an account priced by email.",
      "strava": "The MCP Connector is the surface Strava sanctions for an AI assistant, read-only, scoped to one subscriber's account, with its own status component. Its tool list and rate limits are not public, the API Agreement and prices sit on a host our reader could not fetch, and apps serving more than 10 athletes need a review that refuses AI tools."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/ride-with-gps-vs-strava",
    "json": "https://www.anchorterminal.com/compare/ride-with-gps-vs-strava.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/ride-with-gps-vs-strava.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/ride-with-gps-vs-strava.min.md"
  },
  "markdown": "Strava MCP Connector + API and Ride with GPS API score within a point of each other on agent readiness, 45.8 (E) and 45.2 (E). Ride with GPS API leads on schema \u0026 documentation, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community. Both do hobbies routes.\n\n- Ride with GPS API: grade E, 45.2/100, rank #1139 of 1349. Markdown https://www.anchorterminal.com/tools/ride-with-gps.md · JSON https://www.anchorterminal.com/api/v1/tools/ride-with-gps.json\n- Strava MCP Connector + API: grade E, 45.8/100, rank #1125 of 1349. Markdown https://www.anchorterminal.com/tools/strava.md · JSON https://www.anchorterminal.com/api/v1/tools/strava.json\n- Best hobby, sport and recreation APIs for AI agents: https://www.anchorterminal.com/best/hobbies/index.md\n- All 3 hobbies comparisons: https://www.anchorterminal.com/compare/hobbies/index.md\n\n## Which one, for what\n\n### Ride with GPS API (E)\n\nGood for: An agent planning or reading cycling routes and rides for a consenting person, or running a club's calendar from an organisation account.\n\nAhead on:\n- Schema \u0026 documentation, 72 against 50\n- Agent ergonomics, 57 against 49\n- Payments \u0026 pricing, 30 against 0\n- Maintenance \u0026 community, 60 against 40\n\nAlso in its favour:\n- Free to start without a card\n\nWatch for: No status page or incident history; status.ridewithgps.com redirects to the home page\n\n### Strava MCP Connector + API (E)\n\nGood for: A personal assistant reading one subscriber's training history with consent.\n\nAhead on:\n- Reliability, 63 against 24\n- Security \u0026 auth, 48 against 30\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n\nWatch for: The MCP tool list, schemas and rate-limit numbers are not published; they are only visible after OAuth, which we did not run\n\n\n## Why the edge\n\n### Reliability: Strava MCP Connector + API +39\n\n- Ride with GPS API (24): Read with the hosted lines. No status page, since status.ridewithgps.com answers 301 to the home page and the docs link none (0). No readable incident history (5). The API terms of 11 September 2026 say no fixed request limits currently apply and ask for caching, webhooks and backing off, so there are no numbers to publish (5 of 15). No 429 is documented in the docs or the OpenAPI file; the terms ask clients to back off on failures, uploads run as tasks to poll, and no idempotency key exists for the 30 write operations (4 of 15). No SLA (0). v1 is the current and only version with no beta label (10). 0 + 5 + 5 + 4 + 0 + 10 = 24.\n- Strava MCP Connector + API (63): Read with the hosted lines on the MCP Connector, the surface Strava sanctions for an assistant, with the V3 API where the connector publishes nothing. status.strava.com on Atlassian Statuspage lists Mobile applications, Strava.com, API, Upload, AWS and MCP Connector components with a history feed (20). From 4 August to 3 November 2026 the feed has 15 resolved incidents. None touches the MCP Connector; the API component had Beacon failures for 48 minutes on 23 October; activity uploads were degraded for 3 hours 7 minutes on 27 September with the mobile app unavailable for most users, and Garmin uploads were delayed twice. For the graded surface that reads as minor incidents only (20). API limits are published with numbers (200 per 15 minutes and 2,000 a day, 100 and 1,000 for reads, doubled after the self-service upgrade); the MCP article says limits per minute and per day exist and gives none (8 of 15). The API returns 429 with a JSON error and X-RateLimit-Usage headers and asks callers to throttle, with no Retry-After, and the connector is read-only, so retries are safe; nothing on MCP overload (5 of 15). No SLA (0). The connector launched on 1 June 2026 and carries no beta label (10). 20 + 20 + 8 + 5 + 0 + 10 = 63.\n\n### Payments \u0026 pricing: Ride with GPS API +30\n\n- Ride with GPS API (30): Read with the hosted rubric. No x402, MPP or L402 (0). The API is free under the terms and the plan prices are stated in llms.txt and the App Store listing, but the pricing page shows no figures to our reader and organisation accounts, which the member, event, experience and point-of-interest endpoints need, are priced by email (10 of 20). A free Starter account and a free API client with no card (20). A person signs up and creates the API client in a browser, and basic auth tokens need the account password (0). 0 + 10 + 20 + 0 = 30.\n- Strava MCP Connector + API (0): Read with the hosted rubric. No x402, MPP or L402 (0). A subscription is required and the FAQ says it carries no extra API fee, but the price is on www.strava.com, which robots.txt disallows for our reader, so the pricing line is scored absent and named in openQuestions (0 of 20). No free tier for the connector or for Standard Tier apps, and any subscription trial sits on the unread host (0 of 20). A person subscribes and completes OAuth in a browser (0). 0 + 0 + 0 + 0 = 0.\n\n### Schema \u0026 documentation: Ride with GPS API +22\n\n- Ride with GPS API (72): Public OpenAPI 3.0.1 file with 34 paths, 61 operations and 41 schemas (25). ridewithgps.com/llms.txt describes the product and plans but links no Markdown docs, and the documentation is HTML (5 of 10). Operation descriptions say which endpoints are organisation-only, that uploads and package builds return a task to poll, how experience codes replace each other and that deleting a member keeps their account; little on when not to use an operation (14 of 20). 18 enums, required fields and defaults in the file, but the Error schema is an array of strings (10 of 15). One example in the OpenAPI file, request and pagination examples on the docs pages, and a table of HTTP codes with the `errors` array shape (8 of 15). One version in the path, a rule that only incompatible changes create a new version, and a dated change log back to January 2025 (15). 25 + 5 + 14 + 10 + 8 + 15 = 72.\n- Strava MCP Connector + API (50): A public Swagger 2.0 file describes the V3 API (29 paths, 31 operations, 7 OAuth scopes). The MCP tool definitions are only visible after OAuth, which we did not run, so the contract line is scored on the API half (15 of 25). No llms.txt on developers.strava.com (404) and no Markdown docs (0). The support article names the data the connector reads (activity history, fitness trends, cross-sport insights, gear, best efforts, weather, streaks) and the Swagger descriptions state each operation's purpose and scope; no when-not-to-use guidance and no tool descriptions read (6 of 20). The Swagger file has enums for upload data_type, stream keys and explore activity_type and marks required parameters; one PUT /athlete parameter is declared in the path with no placeholder; MCP inputs unread (6 of 15). Most 200 responses carry examples, errors return a Fault object, 429 is not in the file, and the rate-limits page documents the 429 body (8 of 15). A dated changelog on developers.strava.com with removals announced three months ahead (15). 15 + 0 + 6 + 6 + 8 + 15 = 50.\n\n### Maintenance \u0026 community: Ride with GPS API +20\n\n- Ride with GPS API (60): Read for a closed service. The newest change log entry is 14 October 2026 (30). Five dated entries since 4 August 2026, on 10 August, 3 September, 11 September, 6 October and 14 October (20). A dated change log, developers@ridewithgps.com and a Zendesk help centre that answered 403 to our reader; replies were not tested (10 of 15). No official SDK and no entry in the official MCP registry (0 of 15). No package or CI to judge (0 of 10). 30 + 20 + 10 + 0 + 0 = 60.\n- Strava MCP Connector + API (40): Read for a closed service. Gemini support for the connector arrived on 28 October 2026, and the API changelog's newest entry is 1 September 2026 (30). In the 90 days to 3 November, dated changes are the 1 September endpoint removals and the 28 October Gemini release; the 18 September FAQ is a document, not a change, so three are not established (0 of 20). A dated changelog, a Developer FAQ on the Community Hub (closed to replies), a developer forum there and a support site (10 of 15). No entry in the official MCP registry under a strava.com namespace and no official SDKs, only Swagger Codegen (0 of 15). No package or CI to assess (0 of 10). 30 + 0 + 10 + 0 + 0 = 40.\n\n### Security \u0026 auth: Strava MCP Connector + API +18\n\n- Ride with GPS API (30): OAuth 2.0 authorisation code flow with one scope, `user`, and a revoke endpoint, but no PKCE, expiry or refresh token is documented; basic auth tokens are minted from the account email and password with no documented expiry or revocation; credentials travel in headers (18 of 30). No read-only scope, and the 30 write operations, including deletes of routes, events, members and experiences, need no confirmation (4 of 20). Route names, descriptions, event text and experience messages are user content with no guidance on treating them as untrusted (5 of 15). The API clients page lists clients and tokens; no call log is documented (3 of 15). /.well-known/security.txt returns 404, and no disclosure policy, bug bounty or certification was found (0 of 20). 18 + 4 + 5 + 3 + 0 = 30.\n- Strava MCP Connector + API (48): OAuth 2.0 with seven scopes, 6-hour access tokens, rotating refresh tokens that invalidate the previous one, and POST /oauth/revoke with Basic auth; the connector's consent is in the browser and revocable under My Apps. The token endpoint's parameter table lists client_secret, refresh_token and access_token as query parameters, a documented option that costs 10 (20 of 30). The connector is read-only and scoped to one account, and the API splits read, read_all and write scopes by resource; no confirmation step exists for `activity:write` (18 of 20). Activity titles, descriptions, comments and club posts are user text the connector returns, with no guidance on treating them as untrusted (5 of 15). My Apps lists connected apps for revocation and the API dashboard shows rate-limit usage; no per-call log (5 of 15). security.txt, a disclosure policy, a bug bounty and certifications would sit on www.strava.com, which our reader could not fetch, and the support article's \"security and quality guardrails\" is a claim; scored absent and named in openQuestions (0 of 20). 20 + 18 + 5 + 5 + 0 = 48.\n\n### Agent ergonomics: Ride with GPS API +8\n\n- Ride with GPS API (57): No field selection; polylines and track files sit on separate endpoints and page_size runs from 20 to 200 (12 of 25). page and page_size with meta.pagination, filters for name, visibility, distance, elevation gain, archived and stationary, and privacy_code for non-public items (20). Errors carry HTTP codes and an `errors` array of messages with no codes to branch on (10 of 20). Reads are safe to repeat and package builds return 409 while one runs, but no idempotency key covers creates, and deletes are not confirmed (8 of 20). Two headers and a .json suffix are all a request needs, with no official SDK (7 of 15). 12 + 20 + 10 + 8 + 7 = 57.\n- Strava MCP Connector + API (49): The connector's tool count and definition sizes are not public, so context cost is scored as unknown (10 of 25). The API pages with page and per_page up to 200, before and after timestamps on activities and a cursor on comments; stream keys select channels; whether the MCP tools size their output is unread (12 of 20). API errors return a Fault object with a message and a 429 JSON error, with no error codes list; MCP errors unread (8 of 20). The connector is read-only, so every call is safe to repeat, and the API's reads are too; no idempotency key on uploads and no annotations read (12 of 20). Setup is one `claude mcp add` command plus browser consent; the API has sensible defaults but no official SDKs, only Swagger Codegen (7 of 15). 10 + 12 + 8 + 12 + 7 = 49.\n\n## Score by category\n\n| Category | Weight | Ride with GPS API | Strava MCP Connector + API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 24 | 63 | Strava MCP Connector + API +39 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 72 | 50 | Ride with GPS API +22 |\n| Agent ergonomics | 13% (16.2 this run) | 57 | 49 | Ride with GPS API +8 |\n| Security \u0026 auth | 14% (17.5 this run) | 30 | 48 | Strava MCP Connector + API +18 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 0 | Ride with GPS API +30 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 60 | 40 | Ride with GPS API +20 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 59 | 59 | even |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **45.2 · E** | **45.8 · E** | |\n\n## Facts side by side\n\n| Fact | Ride with GPS API | Strava MCP Connector + API |\n| --- | --- | --- |\n| Kind | HTTP API | MCP server |\n| Vendor | Ride with GPS, Inc. | Strava, Inc. |\n| Hosted endpoint | no (local only) | `https://mcp.strava.com/mcp` |\n| Transports | HTTP | Streamable HTTP |\n| Auth | OAuth or key | OAuth |\n| Pricing | Freemium | Paid |\n| x402 | no | no |\n| Licence | Proprietary service under the Ride with GPS API Terms of Service (effective 11 September 2026) | Proprietary service under the Strava API Agreement (updated 1 June 2026) and the Strava terms, neither read because www.strava.com disallows our reader |\n| Tools exposed | 0 | none |\n| Read-only variant documented | yes | yes |\n| llms.txt | yes | no |\n| Last release | 2026-10-14 | 2026-10-28 |\n| Terms last updated | 2026-09-11 | 2026-06-01 |\n| Privacy policy last updated | 2026-07-31 | 2026-01-01 |\n| Customer content may train models | not found in the text | yes, with an opt-out |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | not found in the text | yes |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n\n## Verdicts\n\n**Ride with GPS API.** A free, documented REST API with a public OpenAPI file, OAuth, filters and pagination on routes and trips, GPS uploads as polled tasks, and a change log updated five times since August 2026. There is no status page, no rate limit figure, no read-only scope, and the organisation-only endpoints need an account priced by email.\n\n**Strava MCP Connector + API.** The MCP Connector is the surface Strava sanctions for an AI assistant, read-only, scoped to one subscriber's account, with its own status component. Its tool list and rate limits are not public, the API Agreement and prices sit on a host our reader could not fetch, and apps serving more than 10 athletes need a review that refuses AI tools.\n\n## Before you call either\n\n### Ride with GPS API\n\n1. Send x-rwgps-api-key on every request and either x-rwgps-auth-token or `Authorization: Bearer`; ask the person for OAuth consent rather than their password\n2. Append .json to endpoints or set `content-type: application/json`, and read the root key named after the resource (`route`, `trip`)\n3. Page list endpoints with page and page_size (20 to 200) and stop when meta.pagination.next_page_url is null; add privacy_code for non-public items\n4. After POST /api/v1/routes.json with a file, poll GET /api/v1/tasks/{id}.json until the task completes; a package build returns 409 while one is running\n5. Treat every delete as final and unconfirmed, since the API has no read-only scope or idempotency key, and back off on failures as the terms ask\n\n### Strava MCP Connector + API\n\n1. Connect with `claude mcp add --transport http strava-mcp https://mcp.strava.com/mcp` and have the subscriber complete the OAuth consent in the browser; a free account is refused\n2. Expect reads only. The connector cannot create, edit or delete activities, so hand uploads to the person or to an app with the `activity:write` scope\n3. On the V3 API, watch X-RateLimit-Usage against 200 per 15 minutes and 2,000 a day, and use webhooks rather than polling; a 429 carries no Retry-After\n4. Do not route Strava API data through another AI tool for an app serving more than 10 athletes; the Developer FAQ says such apps are not approved\n5. Move V3 calls to https://api-v3.strava.com after 4 January 2027 and use POST /oauth/revoke, since the legacy deauthorise endpoint ends on 1 June 2027\n\n## Questions\n\n### Which is better for AI agents, Ride with GPS API or Strava MCP Connector + API?\n\nStrava MCP Connector + API and Ride with GPS API score within a point of each other on agent readiness, 45.8 (E) and 45.2 (E). Ride with GPS API leads on schema \u0026 documentation, agent ergonomics, payments \u0026 pricing and maintenance \u0026 community.\n\n### Do Ride with GPS API and Strava MCP Connector + API need an API key?\n\nRide with GPS API takes an API key or an OAuth sign-in. Strava MCP Connector + API uses an OAuth sign-in.\n\n### Can an agent call Ride with GPS API and Strava MCP Connector + API without installing anything?\n\nNo hosted endpoint is listed for Ride with GPS API. Strava MCP Connector + API has a hosted endpoint at https://mcp.strava.com/mcp.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/ride-with-gps-vs-strava.json, and with the fewest tokens: https://www.anchorterminal.com/compare/ride-with-gps-vs-strava.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"ride-with-gps\", \"b\": \"strava\"}`. From a terminal: `anchor compare ride-with-gps strava`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/ride-with-gps.json and https://www.anchorterminal.com/api/v1/tools/strava.json\n\n## Other comparisons with Ride with GPS API or Strava MCP Connector + API\n\n- [Ride with GPS API vs Ticketmaster Discovery API](https://www.anchorterminal.com/compare/ride-with-gps-vs-ticketmaster.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Ride with GPS API vs Strava MCP Connector + API",
        "url": ""
      }
    ],
    "description": "Strava MCP Connector + and Ride with GPS score within a point of each other for hobbies routes, 45.8 and 45.2 out of 100. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Ride with GPS API E 45.2",
      "Strava MCP Connector + API E 45.8",
      "scores"
    ],
    "h1": "Ride with GPS API vs Strava MCP Connector + API",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/ride-with-gps-vs-strava",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Ride with GPS vs Strava MCP Connector + for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-03",
    "url": "https://www.anchorterminal.com/compare/ride-with-gps-vs-strava"
  },
  "tokens": {
    "markdown": 4600,
    "slim": 3230
  },
  "version": 1
}
