MCP server for personal Strava account — coaching, nutrition, activity edits, split merge.
Server has 13 tools with complete input schemas and descriptions in French. Naming follows verb_noun convention (detect_, merge_, list_, get_, update_). However, descriptions are inconsistent in length and detail. Most parameter descriptions are present but terse. Output schemas are not documented. Error handling guidance is absent. No tool annotations (readOnlyHint/destructiveHint). Composition is sound, tools are single-responsibility and chainable. Security: OAuth tokens stored locally (0o600), no secrets in params. Baseline: 13/13 tools have descriptions; 13/13 have input schemas with types. Average description length ~150 chars (within 10-1024 range). Average params per tool: 2.5 (below median 4). Missing: output schema docs, error recovery guidance, tool annotations.
Détecter des activités consécutives de même sport_type susceptibles d'être les morceaux d'une seule sortie splittée.
Détail complet d'une activité (incluant segments, splits, gear, kilojoules).
Tours / laps d'une activité.
Séries temporelles d'une activité (HR, puissance, vitesse, altitude, GPS, etc.).
Temps passé par zone HR / puissance pour une activité.
Profil de l'athlète connecté (incluant bikes/shoes).
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields. E.g., merge_split_activities returns dict but structure is opaque.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes. merge_split_activities and update_activity should be marked destructive.
Error handling lacks recovery guidance. No tool documents what to do on failure (retry, ask user, abort). E.g., merge_split_activities with dry_run=false could fail mid-upload with no guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Totaux et stats récents (recent_run/ride/swim_totals, ytd, all-time).
Zones HR et puissance configurées sur Strava.
Détail d'un équipement (km cumulés, marque, modèle).
Lister tes activités Strava.
Lister bikes et shoes attachés au compte (depuis /athlete).
Reconstruire une sortie unique à partir d'activités splittées. Méthode : récupère les streams (GPS + HR + puissance + cadence + temp) de chaque activité, les concatène dans un GPX continu, l'uploade comme nouvelle activité. L'API Strava ne permettant pas la suppression, les originaux devront être supprimés manuellement via l'UI (les URLs sont retournées).
Mettre à jour une activité existante.
Descriptions for athlete/gear tools are terse (60 chars avg). 'Profil de l'athlète connecté' lacks context on when to call vs get_athlete_stats. Descriptions should be 50-200 chars with WHEN/WHY guidance.
list_activities accepts 'after' and 'before' as ISO8601 strings but no validation or format constraint in schema. LLMs may pass invalid dates. Add format: 'date-time' to schema.