Deterministic fitness coaching engine: adaptive programs, progression math, readiness autoregulation
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer fft_... personal access token. FitFly users mint one via POST /api/engine/me/mcp-token; coaches mint athlete tokens via the partner API. See /connect.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
}
}The athlete's current multi-day program (render-ready).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| dayIndex | integer | Which program day (1-based). Defaults to the first day. |
{
"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."
}
}
}Valid alternatives for an exercise — same muscle group, filtered to the athlete's equipment/level/injuries. Use before swap_exercise.
| Argument | Type | Description |
|---|---|---|
| exerciseId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"exerciseId"
],
"properties": {
"exerciseId": {
"type": "string"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| goal | string | |
| dayIndex | integer | |
| exercises* | array | Per-exercise completed sets (weights in kg). |
{
"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)."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| exclusions | array | |
| mealsPerDay | integer | |
| trainingDay | boolean | |
| dietaryStyle | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"exclusions": {
"type": "array",
"items": {
"type": "string"
}
},
"mealsPerDay": {
"type": "integer",
"maximum": 5,
"minimum": 3
},
"trainingDay": {
"type": "boolean"
},
"dietaryStyle": {
"type": "string"
}
}
}The athlete's daily calorie + macro targets, computed from body stats, activity, and goal.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| sleep* | integer | 1 terrible … 5 great |
| energy* | integer | 1 drained … 5 great |
| soreness* | integer | 1 none … 5 very sore |
{
"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"
}
}
}Rebuild the whole program from the stored profile (~20s AI generation). Use after a profile change or a plateau.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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).
| Argument | Type | Description |
|---|---|---|
| scope | string | Default 'program'. |
| dayIndex | integer | |
| exerciseId* | string | |
| toExerciseId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"exerciseId",
"toExerciseId"
],
"properties": {
"scope": {
"enum": [
"today",
"program"
],
"type": "string",
"description": "Default 'program'."
},
"dayIndex": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"exerciseId": {
"type": "string"
},
"toExerciseId": {
"type": "string"
}
}
}