fitdays-mcp
fitdays-mcp (Cloudflare Worker)
Удалённый MCP-сервер для неофициального API FitDays / iComon, размещённый на вашем Cloudflare Worker, с входом через OAuth 2.1 (никаких статических API-ключей, которые нужно вставлять в Worker: каждый подключающийся пользователь входит со своими email/password FitDays через страницу /authorize).
Основан на roquerodrigo/fitdays-mcp-server (который работает только в stdio/локально) и адаптирован для Cloudflare Workers по тому же шаблону, что и chrisdoc/hevy-mcp.
Как это работает
src/index.ts— объединяет@cloudflare/workers-oauth-provider(управляет PKCE, динамической регистрацией клиентов, токенами, OAuth discovery) с:src/authorize.ts— страница/authorize: показывает форму email/password/region, проверяет учётные данные реальным входом в FitDays, затем сохраняет{ fitdaysEmail, fitdaysPassword, fitdaysRegion }как grant props (зашифрованные в состоянии покоя библиотекой Cloudflare).src/mcp-handler.ts— обработчик/mcp: автоматически защищён провайдером (требует действительный OAuth bearer token), читает учётные данные из grant и обслуживает протокол MCP черезWebStandardStreamableHTTPServerTransport(из той же версии@modelcontextprotocol/sdk, что используется в оригинальном репозитории).
src/server.ts— те же 5 инструментов, что и в оригинале:list_users,list_devices,get_weight_history,get_latest_weight,refresh_sync.src/fitdays-session.ts— клиент FitDays с кэшем в памяти для каждого изолята (5 минут), чтобы избежать входа и полной повторной синхронизации при каждом вызове, когда изолят Worker "тёплый".
Никакие учётные данные никогда не передаются стороннему серверу: вход происходит в вашем Worker, данные FitDays остаются между Worker и API FitDays.
Related MCP server: Garmin MCP Server
Развёртывание
Требуется Node.js ≥ 22 и бесплатный аккаунт Cloudflare.
npm ci
npx wrangler login
# Crea il namespace KV che l'OAuth provider usa per grant e token
npx wrangler kv namespace create OAUTH_KV
# copia l'"id" restituito in wrangler.jsonc -> kv_namespaces[0].id
npm run worker:dry-run # opzionale: verifica il bundle localmente
npm run worker:deploy # pubblica su https://fitdays-mcp.<tuo-subdomain>.workers.devПодключение Claude (или другого MCP-клиента)
Claude.ai → Настройки → Коннекторы → Добавить пользовательский коннектор
URL:
https://fitdays-mcp.<ваш-поддомен>.workers.dev/mcpНажмите "Connect": откроется страница
/authorizeвашего Worker → введите email, пароль и регион FitDays → авторизуйтесь
С этого момента Claude может вызывать 5 инструментов FitDays, никогда не видя ваш пароль (он остаётся в зашифрованном OAuth grant внутри вашего KV namespace).
Локальная разработка
npm run devwrangler dev запускает Worker локально с имитацией локального KV namespace — полезно для тестирования формы входа и инструментов без развёртывания.
Примечания
Всегда используйте
npm ci, никогдаnpm install.npm ciустанавливает точно версии изpackage-lock.jsonи проверяет каждый пакет по его SHA-512 хешу: если опубликованное в npm содержимое изменится, установка завершится сEINTEGRITYвместо тихой установки другого кода.npm installможет обновить зависимости. Всегда коммитьтеpackage-lock.json.Все зависимости времени выполнения закреплены на точные версии (без
^), поэтому нет дрейфа даже при повторной установке через месяцы.Развёрнутый Worker самодостаточен:
wrangler deployсобирает весь код в момент развёртывания. Во время выполнения он ничего не загружает с npm или GitHub, и последующие изменения, сделанные авторами вышестоящих проектов, не затрагивают уже опубликованный Worker.nodejs_compatтребуется вwrangler.jsonc, потому чтоfitdays-apiиспользуетnode:crypto(MD5 для входа) иrandomUUID().Учётные данные FitDays — это email+пароль (не один API-ключ, как у Hevy): поэтому форма
/authorizeделает реальную попытку входа перед завершением авторизации, так что неверные учётные данные отклоняются сразу, а не молча проваливаются при первом вызове инструмента.
Куда попадает пароль
Только два места:
Серверы FitDays (
online-{us,eu}.fitdays.cn) — неизбежно, это единственный способ аутентификации. Отправляется как MD5(MD5(password+salt)), но salt — публичная константа, поэтому это эквивалентно паролю в открытом виде: не используйте пароль FitDays где-либо ещё.Ваш KV namespace на Cloudflare, внутри grant props (зашифрованных в состоянии покоя библиотекой OAuth Cloudflare).
Никакой другой третьей стороны. fitdays-api имеет ноль зависимостей времени выполнения и только одну сетевую точку во всём коде; нет телеметрии, аналитики или отчётов об ошибках ни в одном из двух вышестоящих репозиториев, ни в этом Worker.
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 gradedqualityAmaintenanceConnects to Garmin Connect and exposes your fitness and health data (activities, sleep, heart rate, steps, body composition) to Claude and other MCP-compatible clients.965MIT
- AlicenseNot gradedqualityDmaintenanceConnects to Garmin Connect and exposes fitness and health data (activities, steps, heart rate, sleep, body composition) to MCP-compatible clients like Claude.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude to Withings health data using OAuth 2.0. Provides 11 read-only tools to access body measurements, activity, sleep, heart rate, and device information from Withings devices.MIT
- AlicenseNot gradedqualityCmaintenanceA personal MCP server on Cloudflare Workers that connects Claude to Google Health API v4, enabling reading of health data like activity, sleep, heart rate, SpO₂, HRV, and nutrition.MIT
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
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/nibu147/fitdays-mcp-worker'
If you have feedback or need assistance with the MCP directory API, please join our Discord server