Read-only local MCP server for personal Strava cardio data
Strong foundation with complete schemas, clear descriptions, and proper tool annotations. All 8 tools have explicit registrations with Zod schemas and descriptions. Naming follows verb_noun convention (get_, list_, summarize_). Parameter descriptions are present and mostly actionable. Key strengths: enum constraints on stream keys, Unix timestamp documentation, pagination support. Weaknesses: descriptions are terse (avg ~80 chars, below 194-char baseline); some parameter descriptions lack format/range details; no output schema documentation; error handling is generic (catch-all with JSON.stringify).
Get detailed data for one Strava activity.
Get laps for one Strava activity.
Get time-series streams for an activity. Use only needed keys to control response size.
Get the authenticated Strava athlete profile.
Get aggregate run, ride, and swim statistics for the authenticated athlete ID.
Get the authenticated athlete's heart-rate and power zones when available.
Descriptions are terse (avg ~80 chars vs 194-char baseline). Most lack WHEN/WHY context. E.g., 'Get the authenticated Strava athlete profile' doesn't explain when to call it vs other athlete tools or what fields to expect.
No output schema documentation. Tools return JSON via text wrapper, but LLMs cannot infer response structure (fields, types, pagination). E.g., strava_list_activities returns what fields? Is there a next_page cursor?
Generic error handling. All errors caught and JSON.stringify'd with no recovery guidance. LLM receives 'error: Invalid activity ID' with no hint to call strava_list_activities first or what format is expected.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List the authenticated athlete's activities in a time range. after and before are Unix timestamps.
Summarize cardio activities in a Unix timestamp range. By default, filters out strength, climbing, and other non-cardio activities.
Parameter descriptions lack format/range details. E.g., 'after' and 'before' say 'Unix timestamp (optional)' but don't specify if seconds or milliseconds, or valid range. 'sport_types' array lacks enum values or examples.
STDIO transport only. Server is not remotely accessible and cannot be used by hosted MCP clients. Limits deployment to local/CLI use only.