fitfly-engine
Deterministic fitness coaching engine: adaptive programs, progression math, readiness autoregulation
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"fitfly-engine": {
"url": "https://workout-engine-production-5dd7.up.railway.app/mcp"
}
}
}원격 엔드포인트
https://workout-engine-production-5dd7.up.railway.app/mcpstreamable-http할 수 있는 일
도구 목록
도구 (10)
🟢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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}커뮤니티
증거