FitCoach MCP
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 :3000AUTH_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_init … 0015_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 + StubBillingProviderNo 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.
Документация
Документ | Что это |
Источник правд — числа, constants, identity, что есть/нет | |
Движо: каждый alg, compiler, and decided | |
Операционнная инструкция — env variables, деплой, | |
О нsir or looks hat: trige bases/en reasons | |
This proд leaves "запис и текctin activati about wellbeing" — it ends to be stored as sensity | |
docs/INITIA-to-PLAN.md? --Not hold. | " |
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityDmaintenanceExposes 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
- FlicenseNot gradedqualityCmaintenanceEnables workout tracking and coaching within Claude conversations, managing exercise configs, logs, streaks, and health metrics via an MCP server with PostgreSQL.
- AlicenseNot gradedqualityBmaintenanceEnables Claude to act as a personal health coach by connecting to Garmin wearable data and Notion workspace for automated calorie tracking, photo food logging, and coaching insights.MIT
- AlicenseNot gradedqualityAmaintenanceEnables 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.1MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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