fitdays-mcp
fitdays-mcp (Cloudflare Worker)
Servidor MCP remoto para la API no oficial de FitDays / iComon, alojado en tu
propio Cloudflare Worker, con inicio de sesión OAuth 2.1 (sin clave de API
estática que pegar en el Worker: cada usuario que se conecta inicia sesión con
su propia email/contraseña FitDays mediante una página /authorize).
Basado en roquerodrigo/fitdays-mcp-server
(que solo funciona en stdio/local) y adaptado para Cloudflare Workers
siguiendo el mismo patrón usado por chrisdoc/hevy-mcp.
Cómo funciona
src/index.ts— integra@cloudflare/workers-oauth-provider(gestiona PKCE, dynamic client registration, tokens y descubrimiento OAuth) con:src/authorize.ts— la página/authorize: muestra un formulario de email/contraseña/region (email/correo, contraseña, región), verifica las credenciales con un inicio de sesión real en FitDays y luego guarda{ fitdaysEmail, fitdaysPassword, fitdaysRegion }como grant props (cifradas en reposo por la librería de Cloudflare).src/mcp-handler.ts— el manejador/mcp: protegido automáticamente por el proveedor (requiere un bearer token OAuth válido), lee las credenciales del grant y sirve el protocolo MCP a través deWebStandardStreamableHTTPServerTransport(con la misma versión de@modelcontextprotocol/sdkusada en el repositorio original).
src/server.ts— las mismas 5 herramientas del original:list_users,list_devices,get_weight_history,get_latest_weight,refresh_sync.src/fitdays-session.ts— cliente FitDays con caché en memoria por aislado (5 minutos), para evitar inicio de sesión + resincronización completa en cada llamada cuando el aislado del Worker está "caliente".
Ninguna credencial se transmite jamás por un tercero: el inicio de sesión ocurre en tu Worker, los datos FitDays se mantienen entre el Worker y la API FitDays.
Related MCP server: Garmin MCP Server
Despliegue
Requiere Node.js ≥ 22 y una cuenta gratuita de 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.devConectar Claude (u otro cliente MCP)
Claude.ai → Configuración → Conectores → Añadir conector personalizado
URL:
https://fitdays-mcp.<tu-subdominio>.workers.dev/mcpHaz clic en "Connect": se abre la página
/allowde tu Worker → introduces email, contraseña y región FitDays → autorizas
A partir de ese momento, Claude puede llamar a las 5 herramientas FitDays sin ver nunca tu contraseña (queda en el grant OAuth cifrado dentro de tu namespace KV).
Desarrollo local
npm run devwrangler dev inicia el Worker localmente con un namespace KV local
simulado — útil para probar el formulario de inicio de sesión y las herramientas sin desplegar.
Notas
Usa siempre
npm ci, nuncanpm install.npm ciinstala exactamente las versiones delpackage-lock.jsony verifica cada paquete contra su hash SHA-512: si el contenido publicado en npm cambia, la instalación falla conEINTEGRITYen lugar de instalar silenciosamente código diferente.npm installpuede actualizar las dependencias. Haz commit siempre delpackage-lock.json.Las dependencias de producción están fijas a una versión exacta (sin
^), de modo que no hay desajustes aunque se vuelva a ejecutar la instalación meses después.El Worker desplegado es autocontenido:
wrangler deployempaqueta todo el código en el momento del despliegue. No descarga nada de npm ni GitHub en tiempo de ejecución, y los cambios posteriores hechos por los autores originales no afectan al Worker ya publicado.nodejs_compates obligatorio enwrangler.jsoncporquefitdays-apiusanode:crypto(MD5 para el inicio de sesión) yrandomUUID().Las credenciales FitDays son email+contraseña (no una única API key como Hevy): por eso el formulario
/authorizeintenta un inicio de sesión real antes de completar la autorización; así las credenciales incorrectas se rechazan de inmediato en lugar de fallar silenciosamente en la primera llamada a una herramienta.
Dónde termina la contraseña
Solo dos destinos:
Los servidores de FitDays (
online-{us,eu}.fitdays.cn): es inevitable, es la única forma de autenticarse. Se envía como MD5(MD5(contraseña+salt)), pero el salt es una constante pública, así que debe considerarse equivalente a contraseña en texto claro: no reutilices la contraseña de FitDays en otros sitios.Tu namespace KV en Cloudflare, dentro de los grant props (cifrados en reposo por la librería OAuth de Cloudflare).
Ningún otro tercero. fitdays-api tiene cero dependencias de producción y un
solo punto de red en todo el código; no hay telemetría, análisis de datos
ni reporting de errores en ninguno de los dos repositorios originales de desarrollo remoto ni en este 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