{"serverId":"mcp-registry/io.github.dropflyai/fitfly-engine","tools":[{"name":"get_program","fixed":{"name":"get_program","description":"The athlete's current multi-day program (render-ready).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get the active program"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":54,"tokensAfter":54},{"name":"get_todays_session","fixed":{"name":"get_todays_session","description":"Today's workout: exercises, sets/reps, per-exercise load guidance and concrete target weights, plus nutrition targets and cycle status. Auto-applies the user's readiness check-in (autoregulation) if they've done one today. Call this to see what the athlete should do now.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"dayIndex":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Which program day (1-based). Defaults to the first day."}}},"annotations":{"readOnlyHint":true},"title":"Get today's training session"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"list_swap_options","fixed":{"name":"list_swap_options","description":"Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["exerciseId"],"properties":{"exerciseId":{"type":"string"}}},"annotations":{"readOnlyHint":true},"title":"List same-area swap options for an exercise"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":93,"tokensAfter":93},{"name":"log_workout","fixed":{"name":"log_workout","description":"Record what the athlete actually lifted. The engine runs progression (double-progression, e1RM), detects PRs, and returns per-exercise outcomes (established/progressed/held/deloaded) with next-time targets. Weights are in kg.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["exercises"],"properties":{"goal":{"enum":["strength","hypertrophy","general_fitness","fat_loss"],"type":"string"},"dayIndex":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},"exercises":{"type":"array","items":{"type":"object","required":["exerciseId","sets"],"properties":{"sets":{"type":"array","items":{"type":"object","required":["weightKg","reps"],"properties":{"rpe":{"anyOf":[{"type":"number"},{"type":"null"}]},"reps":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},"weightKg":{"type":"number"},"completed":{"type":"boolean"}}}},"exerciseId":{"type":"string"},"prescribedRepTop":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991}}},"description":"Per-exercise completed sets (weights in kg)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Log completed sets"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":317,"tokensAfter":317},{"name":"nutrition_targets","fixed":{"name":"nutrition_targets","description":"The athlete's daily calorie + macro targets, computed from body stats, activity, and goal.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get nutrition targets"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":66,"tokensAfter":66},{"name":"readiness_checkin","fixed":{"name":"readiness_checkin","description":"Record how the athlete feels today (energy, sleep, soreness — each 1–5). The engine scores readiness and, on the next get_todays_session, reshapes the workout accordingly (reduce volume / reduce intensity / recovery day). Returns the readiness score + modifier.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["energy","sleep","soreness"],"properties":{"sleep":{"type":"integer","maximum":5,"minimum":1,"description":"1 terrible … 5 great"},"energy":{"type":"integer","maximum":5,"minimum":1,"description":"1 drained … 5 great"},"soreness":{"type":"integer","maximum":5,"minimum":1,"description":"1 none … 5 very sore"}}},"annotations":{"readOnlyHint":true},"title":"Log a readiness check-in"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":199,"tokensAfter":199}],"toolsChanged":6,"tokensSaved":0,"todo":[{"tool":"changelog","params":["limit"]},{"tool":"list_swap_options","params":["exerciseId"]},{"tool":"log_workout","params":["goal","dayIndex"]},{"tool":"meal_plan","params":["exclusions","mealsPerDay","trainingDay","dietaryStyle"]},{"tool":"swap_exercise","params":["dayIndex","exerciseId","toExerciseId"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}