Strava MCP Server with fixed tool naming that complies with MCP protocol requirements.
StravaMCP has basic tool definitions but significant quality gaps. All 5 tools have descriptions and input schemas are present, but descriptions are generic (10-50 chars, well below the 50-200 char LLM-optimized baseline). Parameter descriptions are minimal or absent. The 'ping' tool is a health-check anti-pattern. No output schemas documented. Error handling returns generic failures without recovery guidance. No tool annotations (readOnlyHint, etc.). The server lacks the structured, LLM-optimized definitions needed for reliable agent reasoning.
Get the authenticated athlete's activities.
Get detailed information about a specific activity.
Get authenticated athlete's profile information.
Simple ping endpoint to test server connectivity.
Get the authenticated athlete's stats.
Descriptions are too short (10-50 chars) and lack LLM-optimized context. Baseline is 50-200 chars with WHAT/WHEN/WHY guidance. E.g., 'Get the authenticated athlete's activities' omits pagination behavior, data format, and when to call it vs other tools.
Parameter descriptions are missing or trivial. 'per_page' and 'page' lack guidance on valid ranges, defaults, or pagination semantics. 'athlete_id' lacks context on whether it's the authenticated user's ID or another athlete's ID.
No output schemas documented. Agents cannot plan downstream calls or extract fields reliably. format_activity() and format_stats() transform API responses, but the tool definitions do not declare what fields are returned.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | <=2025-11-25 | v2 |
Error handling is generic and non-actionable. 'Failed to fetch activities' with no recovery guidance. Errors should categorize as retryable/user-fixable/fatal and suggest next steps (e.g., 'Token expired. Refresh credentials and retry.').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in the schema, forcing LLMs to infer safety from descriptions alone.