fitfly-engine

Deterministic fitness coaching engine: adaptive programs, progression math, readiness autoregulation

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
67%
Naming quality
90%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,228Tokens (tool definitions)
~804 BTypical response size
Moderate attention impact (0.96% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "fitfly-engine": {
      "url": "https://workout-engine-production-5dd7.up.railway.app/mcp"
    }
  }
}

Remote endpoints

https://workout-engine-production-5dd7.up.railway.app/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_todays_session(dayIndex)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "dayIndex": {
      "description": "Which program day (1-based). Defaults to the first day.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢readiness_checkin(energy, sleep, soreness)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "energy": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "description": "1 drained … 5 great"
    },
    "sleep": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "description": "1 terrible … 5 great"
    },
    "soreness": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "description": "1 none … 5 very sore"
    }
  },
  "required": [
    "energy",
    "sleep",
    "soreness"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪log_workout(dayIndex, goal, exercises)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "dayIndex": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "goal": {
      "type": "string",
      "enum": [
        "strength",
        "hypertrophy",
        "general_fitness",
        "fat_loss"
      ]
    },
    "exercises": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "exerciseId": {
            "type": "string"
          },
          "prescribedRepTop": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "sets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "weightKg": {
                  "type": "number"
                },
                "reps": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "rpe": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "completed": {
                  "type": "boolean"
                }
              },
              "required": [
                "weightKg",
                "reps"
              ]
            }
          }
        },
        "required": [
          "exerciseId",
          "sets"
        ]
      },
      "description": "Per-exercise completed sets (weights in kg)."
    }
  },
  "required": [
    "exercises"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_swap_options(exerciseId)

Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise.

Input Schema

{
  "type": "object",
  "properties": {
    "exerciseId": {
      "type": "string"
    }
  },
  "required": [
    "exerciseId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪swap_exercise(exerciseId, toExerciseId, dayIndex, scope)

Replace an exercise with a valid same-area alternative. scope 'today' = just this session; scope 'program' = going forward. The new lift starts fresh (day-one calibration).

Input Schema

{
  "type": "object",
  "properties": {
    "exerciseId": {
      "type": "string"
    },
    "toExerciseId": {
      "type": "string"
    },
    "dayIndex": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "scope": {
      "description": "Default 'program'.",
      "type": "string",
      "enum": [
        "today",
        "program"
      ]
    }
  },
  "required": [
    "exerciseId",
    "toExerciseId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_program

The athlete's current multi-day program (render-ready).

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡regenerate_program

Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪nutrition_targets

The athlete's daily calorie + macro targets, computed from body stats, activity, and goal.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪meal_plan(mealsPerDay, trainingDay, dietaryStyle, exclusions)

A day of meals hitting the athlete's targets, USDA truth-checked (flags feasible=false with a note when macros are approximate). Slow (~15s AI call).

Input Schema

{
  "type": "object",
  "properties": {
    "mealsPerDay": {
      "type": "integer",
      "minimum": 3,
      "maximum": 5
    },
    "trainingDay": {
      "type": "boolean"
    },
    "dietaryStyle": {
      "type": "string"
    },
    "exclusions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢changelog(limit)

The 'what changed & why' feed — the engine's coaching decisions (volume bumps, deloads, swaps) in Coach Fly's voice. Use to explain to the athlete why their plan evolved.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools