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
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools