Best Efforts (MMP)
What is MMP?
Section titled “What is MMP?”Mean-Maximal Power (MMP) is the highest average power you’ve sustained for a given duration. For example, your “5-minute MMP” is the best average watts you’ve ever held for exactly 5 minutes in a single activity.
MMP curves are the standard way to characterise a cyclist’s physiology — short durations reflect neuromuscular and anaerobic capacity; long durations reflect aerobic fitness and FTP.
Durations tracked
Section titled “Durations tracked”FitRepo computes MMP for these standard durations:
| Duration | Label |
|---|---|
| 5 seconds | Sprint peak |
| 10 seconds | — |
| 30 seconds | Anaerobic |
| 60 seconds | 1-minute |
| 5 minutes (300 s) | VO₂max |
| 10 minutes (600 s) | — |
| 20 minutes (1200 s) | FTP proxy |
| 30 minutes (1800 s) | — |
| 60 minutes (3600 s) | Hour power |
Calculation method
Section titled “Calculation method”FitRepo uses a sliding window approach over 1-second power records:
- Parse all
recordmessages from the FIT file with apowerfield. - For each target duration
d(in seconds), slide a window of widthdacross the power array. - Compute the mean power for each window position.
- Store the maximum mean power found.
MMP(d) = max over all windows of length d { mean(power[i..i+d]) }This is equivalent to the standard rolling-average method used by tools like Golden Cheetah and WKO.
Storage
Section titled “Storage”Best efforts are stored in the best_efforts JSONB column on the activities table:
{ "5": 520, "10": 480, "30": 420, "60": 390, "300": 318, "600": 295, "1200": 268, "1800": 252, "3600": 238}Keys are the duration in seconds as a string; values are watts (integers).
All-time bests via MCP
Section titled “All-time bests via MCP”The get_best_efforts MCP tool rolls up MMP across all activities in a date range and returns the all-time best for each duration. You can use this to track personal records over time:
# All-time bestsget_best_efforts()
# Bests in the last 90 daysget_best_efforts(from: "2025-01-01", to: "2025-03-31")Null values
Section titled “Null values”A duration slot is omitted from best_efforts if the activity was shorter than that duration (e.g. a 10-minute ride won’t have a 20-minute MMP). Activities without a power meter have best_efforts = null.