If you're an AI reading this: skill.md has everything you need.Read it →
Explorer/MCP/coachleo/running-coach
REMOTE

leo-running-coach

coachleo/running-coach

Coach Leo is an AI running coach that syncs your real training data from Strava, remembers every conversation, tracks your body signals and shoes, and adapts your training to who you actually are as a runner. It assigns you a running character based on your real data. Every recommendation draws from a curated knowledge base of 65+ peer-reviewed papers.

12 tools available
The Journeyman
A reasonable amount of history and nothing concerning in the scan.
Time indexed (5mo)
12toolsRemote/ HTTP5moindexed
100% uptime · 321ms avgChecked Aug 11, 2026
Quality Score
56/95
Established
Risk Score
0/100
Clean
How is this calculated?
Quality Breakdown
Tenure13.6/20
143 days indexed
Capability17.7/25
Tools: 5.7/13 (12 tools)
Description: 5/5
Endpoint: 7/7
Adoption0/25
Use count: 0/20 (0 uses)
Multi-registry: 0/5 (1 registry)
Reliability25/25
Currently live: 10/10
Uptime history: 15/15 100% (58/58 checks)
Security scan: 0 pts in v1.0; ready to weight when coverage improves
Incomplete Data Cap (60)
Usage data is not available for this server. Quality is capped until adoption can be measured.
Risk
0Clean
No signals detected.
The scanner shows
12 tools. Nothing caught our attention.
First indexed Mar 26, 2026
Server Profile
Tools catalogued
12
12 tools available. Full list below.
Hosting
Remote / HTTP
Runs on the internet. No access to your filesystem, SSH keys, or environment variables.
Registry presence
Not verified
Not yet verified by the Official MCP Registry.
Liveness
100%
Based on 48 checks. Average response: 321ms.
Publisher Verification
Not yet verified by the Official MCP Registry.
Endpoint
https://leo--running-coach.run.tools
Tools (12)
get_coaching_briefing
MUST be called at the start of EVERY conversation before any other tool. You are Leo, a personal AI running coach. This briefing provides the runner's complete coaching context: profile, latest activity, today's session, training load trends, target race, active alerts, readiness, recent coaching decisions, and character status. The response includes coaching_identity with Leo's principles — follow them. If needs_onboarding is true, call get_skill_workflow("onboarding") immediately. Never ask the runner questions that the briefing already answers. The briefing already includes recent_activities (last 10 across all sport types). Do NOT call activity(action="query") redundantly after the briefing. If the runner asks about their training, race prep, or weekly review, call training(action="get_plan") and race(action="list") for full context. Never base your analysis on just 2-3 days of data — always look at the bigger picture.
manage_athlete
Manage the runner's profile and running character. Use when the runner shares personal info, asks about their profile, or during weekly reviews. Actions: - get_profile: Full runner profile (body metrics, running form, shoes, preferences, setback history). - update_profile: Update profile fields. data: {field: value} for name, age, weight_kg, height_cm, resting_hr, max_hr, vo2max_estimate, foot_type, arch_type, preferred_terrain, preferred_distance, weekly_availability, cross_training_sports, equipment_available, coaching_preferences. coaching_preferences: JSON object controlling coaching behavior. Merge with existing values (don't overwrite). See instructions for full field reference. - get_character: Get running character data. Returns "Snow Leopard Cub" if not yet eligible (requires 7+ days since signup AND 5+ activities). - recalculate_character: Recompute character from real activity data. Blocked if not eligible. Must call during every weekly review when eligible.
manage_activities
Access and annotate the runner's training activities. Use when the runner mentions a workout, asks about training history, or wants to record feedback. Actions: - query: Search activity history with filters. data: {date_from?, date_to?, sport_type? (run/trail_run/ride/mountain_bike/nordic_ski), training_impact? (primary/cross_aerobic/cross_muscular/cross_recovery), limit?} TIP: Always query at least 10-15 activities (limit=15) to get a meaningful training picture. A single week is never enough context — look at 2-4 weeks. The runner may do cross-training (cycling, skiing, hiking) that matters for load. - get_detail: Full activity details including metrics and GPX summary. data: {activity_id} Call this on the most recent or most relevant activity to give specific feedback. - record_feedback: Record post-workout subjective feedback. data: {activity_id, perceived_effort (1-10), sensations?, notes?, shoe_id?} This is the most valuable subjective data -- always collect after discussing a workout. - update: Update activity fields directly. data: {activity_id, shoe_id?, notes?, name?, weather?, perceived_effort?, sensations?} Use this to correct activity data (e.g. link a shoe) without requiring full feedback.
manage_training
Manage training plans and sessions. Actions: - get_plan: Active plan with sessions (past 7 days + next 14 days). data: {include_past_days?} - create_plan: Create a NEW plan. If active plan exists, returns confirmation with plan details — call again with force=true to replace (old plan archived, completed sessions preserved). Use when: race change, plan doesn't fit, major restructuring needed. For small tweaks, prefer add/remove/update_session. data: {plan_name, objective, start_date, end_date, force?, sessions: [{scheduled_date, session_type, title, description, target_duration_min}]} - add_session: Add a single session to the active plan. data: {scheduled_date, session_type, title, description, target_duration_min} - remove_session: Cancel a planned session (cannot remove completed). data: {session_id} - update_session: Modify a session — reschedule, change type, link an activity, mark completed/skipped. When get_plan shows a 'missed' session with a match_candidate, use this to link the activity (set completion_status=completed and completed_activity_id). data: {session_id, scheduled_date?, completion_status? (planned/completed/skipped/modified), completed_activity_id?, was_adapted?, adaptation_reason?, adaptation_type?, session_type?, title?, description?, target_duration_min?, target_intensity?}
track_body_signals
Track athletic body signals and daily readiness for training optimization. Use when the runner reports discomfort, tightness, unusual sensations during training, or wants to log daily readiness. Actions: - record_observation: Log physical feedback from training: tightness, soreness, asymmetry. data: {body_area, description, severity (info/watch/warning/alert), observation_type?, activity_id?, terrain_context?, ai_interpretation?, scientific_references?, recommended_actions?} Always record even minor observations -- pattern detection over time helps prevent overtraining. - update_observation: Update status/severity of an existing observation. Use to resolve observations that are no longer relevant, or adjust severity as situation evolves. data: {observation_id, status? (active/monitoring/resolved/chronic), severity? (info/watch/warning/alert), description?, ai_interpretation?, follow_up_date?, recommended_actions?} - record_physical_setback: Record a confirmed physical setback. data: {body_area, start_date, severity (minor/moderate/severe), description, setback_type?, probable_cause?, recovery_action?} - update_physical_setback: Update an existing setback's status or add resolution info. data: {setback_id, status? (active/recovering/resolved), severity?, resolved_date?, recovery_action?, modified_training?, lessons_learned?} - record_readiness: Daily readiness check-in (scores 1-10, 10=excellent). data: {date, sleep_hours?, sleep_quality?, energy_level?, mood?, stress_level?, muscle_soreness?, resting_hr?, notes?}
manage_shoes
Manage the runner's shoe collection, inspections, and wear tracking. Use when the runner discusses shoes, asks about shoe condition, or shares shoe photos. Actions: - add: New shoe. data: {name, brand, model, category (trail/road/mixed), estimated_lifetime_km?, purchase_date?, strava_gear_id?, initial_km?} initial_km: km already run in this shoe (ask the runner if they know). The system will auto-match with Strava gear by name if strava_gear_id is not provided. - update: Modify shoe. data: {shoe_id, ...fields to change} - retire: End of life. data: {shoe_id} - inspect: Record wear inspection. data: {shoe_id, zone (outsole/midsole_lateral/ midsole_medial/upper/heel/insole), visual_score (1-10, 10=new), observations, ai_analysis?, estimated_remaining_life_pct?, total_km_at_inspection?} - stats: Shoe statistics (km, inspections, remaining life). data: {shoe_id} - link: Auto-link shoes to activities via Strava gear IDs. No data needed.
Show all 12 tools ↓
manage_races
Manage the runner's races from discovery to post-race report. When a runner mentions a race by name, USE YOUR WEB SEARCH capabilities to automatically find race details (date, location, distance, D+, terrain, GPX, number of runners) before asking them to provide info manually. Load get_skill_workflow("race-planning") for the full race lifecycle workflow. Actions: - list: Get races. data: {status? (planned/completed/dns/dnf)} - add: Register a race. data: {name, date, distance_km, elevation_gain_m, goal_type?, goal_details?, terrain_type?, max_participants?, registration_url?, course_url?, race_role? (objectif/préparatoire/découverte), parent_race_id?} - update: Modify race. data: {race_id, ...fields to change} - report: Record results. data: {race_id, result_time_seconds, result_notes?, race_report?}
search_knowledge
Access and enrich the scientific knowledge base. CRITICAL: you MUST search this knowledge base BEFORE making any training recommendation, interpreting body signals, or advising on overtraining prevention. Never recommend without evidence from the knowledge base. Actions: - search: Hybrid semantic + full-text search. data: {query, category?, tier?, top_k?} Categories: training_methodology, overtraining_prevention, trail_specific, running_form, nutrition_recovery, psychology, cross_training. ALWAYS search before training recommendations. Cite sources naturally. - list_sources: List documents. data: {category?, tier? (T1/T2/personalized)} - ingest: Add document with chunking + embedding. data: {title, content, author, year, category, tier?, tags?, relevance_note?, doi?, isbn?} - record_gap: Log missing topic when search returns no relevant results. data: {topic, query_trigger?, context?, category?, priority?} - list_gaps: Get gaps. data: {status? (open/researching/resolved/dismissed), category?} - resolve_gap: Mark resolved. data: {gap_id, resolution_doc_ids?, resolution_note?}
coaching_memory
Persistent coaching memory across sessions. ALWAYS log meaningful coaching exchanges (decisions, plan adaptations, setback advice). ALWAYS search history before giving advice to avoid repeating yourself or contradicting past decisions. Actions: - log_conversation: Save coaching exchange. data: {topic, summary, decisions?, actions?, tags?} Topics: onboarding, plan_adaptation, sensation_analysis, overtraining_prevention, weekly_review, race_prep. Call after every meaningful coaching exchange. - search_history: Search past coaching, activities, observations. data: {query, scope? (coaching/activities/observations/all), date_from?, date_to?} Search before repeating advice already given.
estimate_vo2max
Estimate VO2max using 3 scientific methods (ACSM Running Equation, Jack Daniels VDOT, HR-Pace regression). Analyzes last 12 weeks of running activities automatically. Detects real max HR from activities if not set in profile.
analyze_gpx
Parse and analyze a GPX file: elevation profile, segments (climb/descent/flat), terrain diversity score.
get_skill_workflow
Load a detailed coaching workflow by its ID. Call this when you detect a coaching scenario that matches one of the Available Coaching Workflows listed below. The returned workflow contains step-by-step instructions, the exact tool call sequence, and knowledge base queries to execute. ALWAYS load the relevant workflow BEFORE responding to a complex coaching scenario. This ensures consistent, science-backed coaching across all sessions. Available skill IDs and their triggers: - onboarding: new runner, empty profile, first conversation - post-activity-analysis: runner finished a workout, wants to debrief - body-signal-analysis: runner reports discomfort, tightness, unusual feelings - overtraining-monitor: recurring discomfort, load spikes, overtraining risk questions - weekly-review: "bilan de la semaine", weekly summary, how was my week - adaptive-training-plan: create/adapt plan, prepare for race - race-planning: mentions a race, wants to find races, reports results - deep-research: knowledge enrichment, deep research session - gpx-pattern-analysis: shares GPX file, analyze a route - shoe-wear-analysis: shares shoe photos, asks about shoe condition - character-reveal: first character reveal (only when eligible)

Is this your server?

Create a free RNWY account to connect your on-chain identity to this server. MCP server claiming is coming; register now and you'll be first in line.

Create your account →
Similar servers
Agentic News
AI-powered news intelligence — 21 tools for personalized monitoring, briefings, and semantic search
Sherlock Domains MCP
An MCP server that enables users to buy and manage domains through Claude.
ai.anzenna/anzenna
MCP server for Anzenna
Airbyte Status Checker
An MCP server for Claude Desktop that allows users to check the status of their Airbyte connections.
ai.mcpcap/mcpcap
An MCP server for analyzing PCAP files.
Vendure MCP Server
A standalone server that enables programmatic interaction with Vendure CLI commands, allowing external MCP clients to automate and integrate with Vendure e-commerce projects through command execution and project analysis.
Indexed from Smithery · Updates nightlyView on Smithery →