Icuvisor.app - opensource local MCP server, shipped as a signed binary for Mac and Windows

Hi,

I ran into a bug in the validate_workout tool: it rejects workout descriptions that use the syntax documented in the original Workout builder post — i.e. a title line, a blank line, then step lines, repeated for warmup / main set / cooldown, e.g.:

Warmup
- 20m 60% 90-100rpm

Main set 6x
- 4m 100% 40-50 rpm
- 5m recovery at 40%

Cooldown
- 20m 60% 90-100rpm

validate_workout returns a PARSE_ERROR on this input, with the message:

“structured workout step lines must form a single contiguous block; multiple blocks separated by prose are not supported by the intervals.icu DSL”

This appears to be incorrect — this is exactly the format shown in the official workout builder documentation, and I confirmed that submitting it directly as the event description (bypassing validate_workout/workout_doc) is parsed correctly by the actual intervals.icu upstream: the resulting event has the correct repeat_reps structure and correct total duration.

So it looks like validate_workout’s local reimplementation of the DSL parser is out of sync with the real upstream parser — it doesn’t allow blank lines / header text between step blocks, even though upstream does.

Steps to reproduce:

  1. Call validate_workout with the multi-block description above (or with an equivalent workout_doc containing a reps group between two flat step groups).
  2. Observe valid: false with the “must form a single contiguous block” error.
  3. Submit the same text directly as an event description via add_or_update_event (no workout_doc).
  4. Fetch the event back — it has the correct structured steps with repeat_reps set, matching what the intervals.icu web UI shows.

Would be great if validate_workout could be updated to accept this documented syntax so it doesn’t produce false negatives.

Thanks!