Skip to main content
Glama
nibu147
by nibu147

fitdays-mcp (Cloudflare Worker)

비공식 FitDays / iComon API용 원격 MCP 서버로, 사용자의 Cloudflare Worker에서 호스팅되며 OAuth 2.1 로그인을 사용합니다(Worker에 붙여넣을 정적 API 키가 없습니다. 연결하는 모든 사용자는 /authorize 페이지를 통해 자신의 FitDays 이메일/비밀번호로 로그인합니다).

roquerodrigo/fitdays-mcp-server(stdio/로컬에서만 실행되는) 를 기반으로, chrisdoc/hevy-mcp와 동일한 패턴을 따라 Cloudflare Workers에 맞게 다시 작성했습니다.

작동 방식

  • src/index.ts@cloudflare/workers-oauth-provider를 다음 구성 요소와 결합합니다(PKCE, 동적 클라이언트 등록, 토큰, OAuth discovery 처리).

    • src/authorize.ts/authorize 페이지: 이메일/비밀번호/지역 입력 폼을 표시하고, FitDays에 실제 로그인을 통해 자격 증명을 확인한 다음 { fitdaysEmail, fitdaysPassword, fitdaysRegion }grant props로 저장합니다(Cloudflare 라이브러리에 의해 휴지 상태에서 암호화됨).

    • src/mcp-handler.ts/mcp 핸들러: provider가 자동으로 보호합니다(유효한 OAuth bearer 토큰 필요). grant에서 자격 증명을 읽어 원본 저장소에서 사용한 것과 동일한 버전의 @modelcontextprotocol/sdk에서 가져온 WebStandardStreamableHTTPServerTransport를 통해 MCP 프로토콜을 제공합니다.

  • src/server.ts — 원본과 동일한 5개의 도구: src/server.ts, list_devices, get_weight_history, get_latest_weight, refresh_sync.

  • src/fitdays-session.ts — isolate별 메모리 캐시(5분)가 있는 FitDays 클라이언트로, Worker isolate가 '핫'한 상태일 때 호출할 때마다 로그인 및 전체 재동기화를 방지합니다.

어떤 자격 증명도 제3자 서버를 거치지 않습니다. 로그인은 사용자의 Worker에서 이루어지며 FitDays 데이터는 Worker와 FitDays API 사이에만 존재합니다.

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

클로드(또는 다른 MCP 클라이언트) 연결

  1. Claude.ai → 설정 → 커넥터 → 커넥터 비공개 추가

  2. URL: https://fitdays-mcp.<subdomain>.workers.dev/mcp

  3. "Connect" 클릭 → 사용자 Worker의 /authorize 페이지가 열립니다 → 이메일, 비밀번호, FitDays 지역을 입력하면 인증됩니다.

이 시점부터 Claude는 사용자의 비밀번호를 볼 수 없이도 FitDays 도구 5개를 호출할 수 있습니다(비밀번호는 암호화된 OAuth grant props 내에서 KV 네임스페이스에 유지됩니다).

로컬 개발

npm run dev

wrangler dev는 로컬 KV namespace를 시뮬레이션하기 위해 로컬에서 Worker를 시작합니다. 배포하지 않고도 로그인 양식과 도구를 테스트할 때 유용합니다.

참고 사항

  • 항상 npm ci를 사용하고, npm install은 절대 사용하지 마세요. npm ci는 정확히 package-lock.json에 명시된 버전과 같은 hash SHA-512를 확인합니다. npm에 게시된 콘텐츠가 변경되면 조용히 다른 코드를 설치하는 대신 EINTEGRITY 오류와 함께 설치가 실패합니다. npm install을 반대로 종속성을 업데이트할 수 있습니다. 항상 package-lock.json을 Git에 커밋하세요.

  • 모든 런타임 종속성은 정확한 버전으로 고정되어(고정 파운드, ^ 없음) 몇 개월 후에 환경을 다시 설치해도 drift가 없습니다.

  • 배포된 Worker는 자가 수정적입니다. wrangler deploy는 배포 시점에 모든 코드를 번들합니다. 런타임에서는 npm이나 GitHub에서 아무것도 다운로드하지 않으며, 이후 The author님이 만든 업스트림 변경 사항은 이미 게시된 Worker에 영향을 미치지 않습니다.

  • nodejs_compatfitdays-apinode:crypto(MD5연과 randomUUID()를 사용하기 때문에 wrangler.jsonc에서 필요합니다.

  • FitDays 사용자 인증은 이메일 + 비밀번호입니다(Hevy와 같이 단일 API 대신). 그 때문에 /authorize` 폼은 인증을 완료하기 전에 실제 로그인을 시도하므로 잘못된 자격은 악성이 아니라 첫 번째 도구 호출에서 바로로 거부됩니다.

비밀번호의 최종 위치

단 두 곳입니다:

  1. FitDays 서버 (online-{us,eu}.fitdays.cn) — 피할 수 없는 유일한 인증 방법입니다. MD5(MD5(password+salt))로 전송되지만 salt는 공개 상수이므로 일반 텍스트 비밀-generic처럼 취급해야 합니다. 다른 곳에서 FitDays 비밀번호를 재사용하지 마세요.

  2. Cloudflare의 KV 네임스페이스, grant props 안에 저장됩니다(Cloudflare OAuth 라이브러리가 휴지 상태에서 암호화).

다른 제3자는 없습니다. fitdays-api는 런타임 의존성이 전혀 없고, 전체 코드에서 단 하나의 서버 지점만 있습니다. 두 개의 업스트림 저장소에서도, 이 Worker에서도 전송 분석, 수업 측정, 오류 보고 기능이 없습니다.

F
license - not found
Not graded
quality - not tested
C
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
    Connects to Garmin Connect and exposes fitness and health data (activities, steps, heart rate, sleep, body composition) to MCP-compatible clients like Claude.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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

View all related MCP servers

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.

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/nibu147/fitdays-mcp-worker'

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