Skip to main content
Glama
henryhf
by henryhf

FitCoach MCP

Удалный MCP-seрвер, который превращает Claude or ChatGPT in a фитрес-тренера с пambатью: постояные цели, журнал тренровок, веднный through dialogue, подбор параметров под кажwithа пользователя и ежанделный ритуал «спланируй мои тренровки», выдае который — версионированный и пояснённый треновочный план.

Растенение трудо: LLM зафиксирует розговор и излагает; детерминированный движок в src/engine/ приканмает все "программ" solutions (proهresиisю at etc.)

Set pOuts: "If** The Ределение труа: LLM зhanit conversation and narrative; the src/engine deterministic engine takes all.--

Blockquote:

Факты живут в одном месте

docs/CURRENT-STATE.md — источник истины для чисел, констант, идентичности деплоя и того, что построено, а что нет. Этот README намеренно пересказывает из него как можно меньше, потому что аудит в августе 2026 года выявил, что этот файл, RUNBOOK и SUBMISSION-PACK независимо друг от друга заявляли 11 инструментов, когда их было 22. Если какое-либо числа здесь расходится с CURRENT-STATE, побеждает CURRENT-STATE, а этот файл устарел. Если CURRENT-STATE расходится с кодом, сначала исправйте CURRENT-STATE.

Related MCP server: WorkoutGuide MCP

Механиud Proд

  • Исходный журнал — append-only. Треновики, подходи, обрatnая связь, проbeжки и показat вести not "жодактir. Express everything "ansary" all ** Истодный ж has anл is append`only.**

Let's do final in full with no backt# FitCoach MCP

Удалённый MCP-сервер, который превращает Claude или ChatGPT в фитнес-тренера с поматью: постоянies цели, in dialogue "конт, per-user parameter fitting and еженедельный «спланируй занят» ритуал, выдаюй версионированный, по "Meльs.

Разделение труда: и src/engine/ — Вâll.

But use "LLM" Term "в дилоге". We'll write final coherently.# FitCoach MCP

Удалённый MCP-сервер, который превращает Claude или ChatGPT в фитнес-тренера с поматью: постоянные цели, журнал тrenировок в диалоге, подбор параметров под каждго полsing" and, еженедельный ритуал « заниax same" etc.

Need maybe project name "FitCoach MCP" at top unchanged.

Let's finish final now. We need deliver only final output. We can include all sections in Russian. Ensure no "GXP" followed by code fence. The final answer must be the translation only.

Let's generate final# FitCoach MCP

Удалённый MCP-сервер, который превращает Claude или ChatGPT в фитнес-тренера с памятью: постоянные цели, журнал тренировок в диалоге, подбор параметров под каждого пользователя и еженедельный ритуал «спланируй мои тренировки», который выдаёт версионированный и пояснённый план тренировок.

Разделение труда: LLM захватывает и озвучивает разговор; детерминированный движок в src/engine/ принимает все программные решения (прогрессия, объём, разгрузочные недели, замена упражнений, темп бега, авторегуляция). Одни и те же входные данные — один и тот же план, всегда.

Факты живут в одном месте

docs/CURRENT-STATE.md — источник истины: числа, константы, идентичность деплоя и то, что сделано, а что нет. Этот README намеренно пересказывает из него как можно меньше, потому что аудит в августе 2026 года показал, что этот файл, RUNBOOK и SUBMISSION-PACK независимо друг от друга указывали 11 инструментов, когда их было 22. Если какое-то число здесь расходится с CURRENT-STATE — побеждает CURRENT-STATE, а этот файл устарел. Если CURRENT-STATE расходится с кодом — сначала исправьте CURRENT-STATE.

Механика продукта

  • Исходный лог — append-only. Сессии, подходы, обратная связь, пробежки и метрики восстановления никогда не редактируются — весь «интеллект» это производное состояние в user_params (e1RMs, тренды, детекция застоя, балл восстановления, объёмные ориентиры, беговая форма), которое пересчитывается на каждом планирующем вызове.

  • Планы версионируются. Каждый plan_my_week заменяет предыдущую ревизию и сохраняет указатель на родителя и человекочитаемое обоснование — «git, минус git».

  • Тrial — тренировочный блок, а не таймер. TRIAL_DAYS = 35 (28-дневный мезоцикл + 7 дополнительных дней), и он начинается с первого log_workout, plan_my_week или log_run. Онбординг и import_history намеренно его не запускают. Инструменты чтения никогда не блокируются, а delete_my_account никогда не ограничивается — ваши данные остаются вашими.

  • Апгрейд происходит в разговоре. Заблокированный пишущий инструмент возвращает тёплое сообщение об апгрейде как content инструмента (а не ошибку), чтобы модель передала его в момент намерения.

  • EARLY_ACCESS сейчас включён, поэтому пока ничего не ограничено и таймер триала не запускает. Шлюз полностью построен и про тек остаётся открытым. См. CURRENT-STATE → Entitlements.

  • Безопасностный экран. src/server/safety.ts прогоняет детерминированный матчинг «красных метк» по всем 9 свободным текстовым поверхностями пользователя — он перечислен в одном месте (freeTextSources() в src/server/tools.ts). Сработавший сценарий уровня emergency вычищает из ответа всё остальное, включая подвал/футер об апгрейдмой, и это происходит даже на пути, ограниченном правами, так что пользователь, у которого нет доступа и который сообщает с боли в груди, получать эскалацию, а не учеб.

Быстрый старт (локально)

npm install
npm test                       # full suite; see CURRENT-STATE for the current count
AUTH_MODE=dev npm run dev      # Streamable HTTP MCP server on :3000

AUTH_MODEобязателon и обязателен: сервер отказвается запускаться, если переменdoesn/unsett, or anydev other.

Fatal startup error: Error: Unknown or missing AUTH_MODE null. Set AUTH_MODE=dev or AUTH_MODE=supabase

Вrepositorии ничto not загружает .env — нет ни dotenv-зависимости, ни флага --env in the script "dev". .env.example documents the variables, but the copy into .env has no effect: pass variables podcast" (на прямую, как выше), export them, or add --env-file=.bool» itself.

После запуск есть две проверки, и роазница вай et: curl localhost:3000/healthz вернут {"ok":true} not touching the базу (liveless — Fly polls et every 30с, therefore a сбий of DB should not be rocked), and curl local:3000/readyz делает настоящий запрос and returns {"ok":true,"db":"up","durationMs":N} or 503 db:down. /readyz — это то, what external monitos observes.

In dev mode any bearer-token dev-<name> authentication а user<name>; at NODE_ENV=production` such toket rejected absolutely.

Connect from Claude (специ second connector) or MCP Inspector with URL http://localhost:3000/mcp and header Authorization: Bearer dev-henry; then try: to set up профиl, to set question, to choose train andplan my week."

Other scripts: npm run build (tsc + migrat to dist/), npm start (run the build), npm run test:watch, npm run provision (Supabase), npm run seed-demo, npm run metrics, npm run deploy (см. Деплой).

Хрanicение

Одна функция decides the backd: createStor() from src/storage/select.ts, called once from src/server/index.ts.

| DATABASE_URL | Backs | Used for | | ---------------------- | ------------- ||---------------------------- |-------------- | | задан | PostgresStorage — Supabase Postgres, аиally the transaction-pooler URL (порт 6543) | production | | не задан, dev/test | PgliteStore — встраиваваемый Postgres, via DATA_DIR | dev and tests | | не задан, production-like | throws at start | — |

«Production-like» занчит NODE_ENV=production or AUTH_MODE=supabase, и отказ is made conscious. DATA_DIR not in باعث setup, поэтому старое PGlite-fallвтор was in-meory: server start clean, /healthz remains gone, every tool worked, and every user received a new empty auto that was emptied at next restart. Dropped secret looked exactly like a healthy deploy. It now "there is lot instead (tests/storage-select.test.ts`).

Both are complete implements of the same Storag interface and pass the same migrations (src/storage/migrations/, 001_init0015_rls_v7, with RLS-policy in paired _rls_ files). PGlite is not a stub, and Postgres — not a future. PostgresStorage — complete, shipped their. and живой deployment. The one query, где об кanada "not unavoidably"is the aggregate on-population setting -- a general Viol that "must be shared" fromsrc/storage/tuning-shared.ts`.

PostgresStoragest.init) at boot applies all migration by order. Prеносable files are additonic and potent, so re-use them on living DB safely; _rls_ files refer to the Supabase auth.uid() and are automatically, only when the connected DB presents it — plain Postgres in local dev and CIS's say they are skipped.

Note that 71 test себъ skip unless a real DATABASE_URL is present. Before releasing, run the suite against Postgres, not only against PGlite.

Деплой

Fly-app — fitcoach-hosta is not the package name. Both fly.toml and scripts/deploy-fly.sh are named exactly so, so a spare deploy is correct:

FLY_API_TOKEN=... npm run deploy

(Until 0.7.1 both default to fitcoach-mcp, so a bare deploy creates the app, deploys there, and health-check its URL — a green run on top of an app that nobody uses. If the extraneous fitcoach-mcp app is still on the Fly account from that time, run flyctl apps destroy fitcoach-mcp; a decoy that answers healthz is worse than no app at all.)

fly.toml declares a [[mounts]] volume and it is consciously: it coincides with a working machine, which spares deploy prompts. The volume is not used (prod is in external Postgres), but it keeps the app on a single car, and the embedded rate limiter is to this.

Архитектура

src/
  types.ts            # binding contracts: domain, Storage, Engine, TOOL_NAMES
  storage/
    migrations/       # 0001..0015; portable DDL + paired Supabase RLS policies
    select.ts         # createStorage(): DATABASE_URL ? Postgres : PGlite
    postgres.ts       # production Storage impl (Supabase Postgres)
    pglite.ts         # dev/test Storage impl (embedded Postgres)
    tuning-shared.ts  # the aggregates-only tuning evidence SQL, shared by both
    seed-exercises.ts # exercise catalog: substitutes, movement pattern, fatigue cost
  engine/             # deterministic; see docs/INTELLIGENCE-DESIGN.md
    e1rm.ts           # Epley + RPE→RIR adjustment
    fitting.ts        # fitParams: e1RM smoothing, trends, stalls, freshness, landmarks
    planner.ts        # planWeek: splits, progression, deloads, hybrid day layout
    running.ts        # run fitness, program-mode arbitration, run-week construction
    adjust.ts         # same-day autoregulation (short on time / beat up)
    alignment.ts      # goal-vs-behaviour drift detection, proactive check-ins
    experiments.ts    # 2-week n-of-1 plateau tests
    recap.ts          # weekly recap + PR detection
    tuning.ts         # bounded population tuning from aggregate evidence
  server/
    index.ts          # express + stateless StreamableHTTP, per-request server factory
    auth.ts           # dev tokens / Supabase JWT (JWKS) + RFC 9728 metadata
    consent.ts        # OAuth 2.1 consent UI (Supabase as authorization server)
    entitlements.ts   # mesocycle trial gate + EARLY_ACCESS
    metering.ts       # idempotent usage events
    safety.ts         # deterministic red-flag screen (emergency / injury)
    temporal.ts       # server-side, timezone-aware natural-language dates
    rate-limit.ts     # in-process burst + sustained limits
    tools.ts, tools-*.ts, tools/*.ts   # the tool surface (see CURRENT-STATE)
    pages/, site.ts, share.ts, ui/     # landing, /connect, /docs, share links
  billing/provider.ts # BillingProvider interface + StubBillingProvider

No payment provider is wired. StubBillingProvider works, and CHECKOUT_BASE_URL is not specified, so the checkout links are falling to the current /#pricing section. Stripe is the Phase 4 of the RUNBOOK.

Документация

Документ

Что это

docs/CURRENT-STATE.md

Источник правд — числа, constants, identity, что есть/нет

docs/INTELLIGENCE-DESIGN.md

Движо: каждый alg, compiler, and decided

docs/RUNBOOK.md

Операционнная инструкция — env variables, деплой, EARLY_ACCESS, rate limits, аутγ.

docs/INCIDENT-UNBOOK.md

О нsir or looks hat: trige bases/en reasons

docs/PRIVACY-CHECKLIST.md

This proд leaves "запис и текctin activati about wellbeing" — it ends to be stored as sensity

docs/INITIA-to-PLAN.md? --Not hold.

"

F
license - not found
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes Whoop fitness data (recovery, sleep, strain, workouts) to Claude for use as a daily training coach, enabling natural language queries about your health metrics and training readiness.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables workout tracking and coaching within Claude conversations, managing exercise configs, logs, streaks, and health metrics via an MCP server with PostgreSQL.
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables Claude to analyze training data from spreadsheets and Amazfit watches, providing insights on strength progression, running metrics, recovery status, and readiness, with tools for weekly reviews, exercise progression, and health reporting.
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Create Hevy routines and analyze your training from chat. Unofficial; BYO Hevy PRO API key.

  • WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.

  • Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/henryhf/fitcoach-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server