Skip to main content
Glama
a1dancole

MyFitnessPal MCP

by a1dancole

MyFitnessPal MCP — Claude 트레이닝 코치를 위한 영양 데이터

Cloudflare Workers에 배포된 원격 MCP 서버로, 당신의 MyFitnessPal 다이어리 — 모든 음식의 1회 제공량과 시간, 끼니별 및 일일 에너지·매크로·마이크로 영양소 합계, 수분, 기록된 운동, 걸음 수, 체중 — 를 Claude에 노출합니다. 커스텀 커넥터로 한 번 추가하면 Claude 웹, 데스크톱, 모바일에서 모두 작동합니다. Strava, Google Health, Renpho 커넥터와 함께 사용하면 코치가 훈련 부하, 회복, 체성분 그리고 영양 공급을 모두 볼 수 있습니다.

MFP와 통신하는 방식: MyFitnessPal에는 공개 API가 없습니다(파트너 프로그램은 폐쇄됨). 이 서버는 모바일 앱 자체 OAuth ID 흐름과 앱이 사용하는 동일한 api.myfitnesspal.com/v2 API를 사용합니다 — myfitnesspalapi.com에 보관된 파트너 문서가 설명하는 그 API입니다. 브라우저, 쿠키, 스크래핑, 캡차가 없습니다. ID 흐름에 대한 크레딧: seonixx/myfitnesspaljnelle/MyFitnesspal-API-Golang. 비공식이며 MFP는 언제든 변경할 수 있습니다.

도구

도구

답변 내용

get_daily_nutrition

"오늘 무엇을 먹었나?" — 끼니별 및 일일 합계(에너지, 단백질, 탄수화물, 순탄수화물, 식이섬유, 당, 지방 하위 유형, 콜레스테롤, 나트륨, 칼륨, %DV 미량 영양소), 모든 음식의 1회 제공량 및 타임스탬프, 수분, 운동, 걸음 수, 체중 기록

get_food_log

기간에 따른 개별 음식 기록, 끼니 또는 텍스트 검색으로 필터 가능 — 운동 세션 전후에 먹은 음식, 반복적으로 나타나는 음식

get_nutrition_trend

기간에 따른 일일 합계, 기록된 날짜 기준 평균, 최소/최대 에너지, 단백질·탄수화물·지방 에너지 비율, 주간 평균, 수분/운동/걸음 수

get_exercise_log

MFP에 기록된 운동(시간, 칼로리, 거리, 심박수) 및 일일 걸음 수

get_weight_log

MFP에 기록된 체중 항목

get_profile

이름, 성별, 생년월일/나이, 키, 로케일 + 토큰 상태

run_diagnostics

종단 간 점검: 토큰 갱신, 프로필, 계정이 허용하는 다이어리 types/fields 조합(원본 샘플 포함), 측정 항목, 후보 목표 엔드포인트

query_endpoint

탈출구: 커넥터의 인증을 적용하여 모든 api.myfitnesspal.com / ID 엔드포인트 호출

refresh_data

캐시된 날짜와 기억된 요청 형태 삭제, 토큰 갱신

delete_my_data

계정에 캐시된 모든 데이터 삭제

문제 해결: 도구에서 오류가 발생하거나 데이터가 누락된 것처럼 보이면 먼저 run_diagnostics를 실행하세요. 계정에 대해 MFP가 수용하는 정확한 types/fields[] 조합과 항목 유형별 원본 샘플을 보고합니다.


Related MCP server: MyFitnessPal MCP Server

작동 방식

Claude (web/desktop/mobile)
  └─ custom connector → /mcp
       └─ workers-oauth-provider  (this Worker IS Claude's OAuth server)
            └─ AuthHandler        (MFP sign-in page: one-time credential → token exchange)
                 └─ MyFitnessPalMCP (Durable Object) → MfpClient → api.myfitnesspal.com/v2

로그인 (커넥터의 /authorize 페이지에서 한 번)

  1. POST identity-api.myfitnesspal.com/oauth/token — 모바일 앱의 OAuth 클라이언트에 대한 client-credentials 토큰.

  2. GET identity-api…/clientKeys — MFP가 비밀번호 로그인에 사용하는 HS512 서명 키.

  3. POST identity-api…/oauth/authorizecredentials=<JWT{username, password}> 포함 — mfp://identity/callback?code=…로의 리디렉션 반환.

  4. POST …/oauth/token(authorization_code) — access + refresh + id 토큰.

  5. GET identity-api…/users/{sub} — MFP 도메인 사용자 ID(mfp-user-id 헤더) 및 프로필.

refresh token(및 첫 번째 access token)만 OAuth grant의 props 안에 암호화되어 보관되며 비밀번호는 저장되지 않습니다. 이후 Worker가 자동으로 갱신하며, 가장 최근에 교체된 refresh token은 KV에 봉인된 채 보관됩니다.

다이어리 읽기

GET api.myfitnesspal.com/v2/diary?entry_date=YYYY-MM-DD&types=…&fields[]=…Authorization: Bearer, mfp-user-id, mfp-client-id, 앱의 api-version/user-agent 헤더를 사용합니다. 항목 유형: food_entry, diary_meal, exercise_entry, water, steps_aggregate. 페이지네이션은 Link: rel=next 헤더를 따릅니다.

모바일 토큰이 허용하는 정확한 types/fields[]는 문서화되어 있지 않으므로 클라이언트가 이를 발견합니다: 가장 풍부한 요청을 시도한 다음 더 작은 필드 세트, 필드 없음, 유형별 하나씩 시도하며 — 하루 동안 승리한 조합을 기억합니다. 거부된 것은 도구 결과에 보고됩니다. 완료된 날짜는 변경할 수 없으며 30일 동안 캐시(봉인)됩니다. 오늘은 항상 실시간입니다. 각 날짜는 업스트림 호출 1회이므로 기간은 92일로 제한됩니다.

필드 매핑

nutritional_contents → 단위 접미사 키: energy_kcal(kJ 변환), protein_g, carbohydrates_g, net_carbs_g, fiber_g, sugar_g, fat_g, saturated_fat_g, monounsaturated_fat_g, polyunsaturated_fat_g, trans_fat_g, cholesterol_mg, sodium_mg, potassium_mg, 그리고 calcium/iron/vitamin_a/vitamin_c/vitamin_d_pct_dv(MFP는 이 값을 일일 권장량의 백분율로 저장). 알 수 없는 영양소는 extra 아래 유지됩니다.

일일 합계는 MFP 자체 diary_meal 요약이 있을 때 그 값을 사용하고(totals_source: "diary_meal"), 그렇지 않으면 food_entry 행을 합산합니다.

캐싱 및 암호화

MFP_CACHE KV 네임스페이스에 기록되는 모든 것(토큰, 발견된 요청 형태, 다이어리 날짜)은 SESSION_ENCRYPTION_KEY에서 파생된 키로 AES-256-GCM 봉인되며 사용자별로 키가 지정됩니다. 비밀 키가 없으면 캐싱이 비활성화됩니다. 캐시 실패는 요청을 중단시키지 않습니다.


클라이언트 자격 증명의 출처

ID 흐름에는 MyFitnessPal Android 앱에 내장된 OAuth 클라이언트 id/secret이 필요합니다. 이 저장소에는 포함되어 있지 않으며, 위에 링크된 Go 클라이언트가 .env.sample에 포함하고 있습니다. Worker 비밀 값 MFP_CLIENT_IDMFP_CLIENT_SECRET으로 설정하세요. MFP가 이를 교체하면 업데이트할 때까지 로그인이 작동하지 않습니다.

배포

옵션 A — GitHub Actions

.github/workflows/deploy.ymlmaster로 push할 때마다 배포합니다. 비밀 값은 Cloudflare에 있으며 GitHub에는 CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID만 보관됩니다.

  1. 두 개의 KV 네임스페이스(MFP_OAUTH_KV, MFP_CACHE)를 만들고 그 id를 wrangler.jsonc에 넣으세요.

  2. 두 개의 GitHub 비밀 값을 추가하고 push하세요.

  3. Cloudflare에서 (Workers & Pages → myfitnesspal-mcp → Settings → Variables and Secrets) 비밀 값 SESSION_ENCRYPTION_KEY(아무 긴 랜덤 문자열), MFP_CLIENT_ID, MFP_CLIENT_SECRET을 추가하세요. 선택적으로 ALLOWED_EMAILS 변수를 자신의 MFP 이메일로 설정하면 다른 사람이 배포에 연결할 수 없습니다.

옵션 B — 로컬 wrangler

npm install
npx wrangler kv namespace create MFP_OAUTH_KV   # paste the id into wrangler.jsonc
npx wrangler kv namespace create MFP_CACHE      # paste the id into wrangler.jsonc
npx wrangler secret put SESSION_ENCRYPTION_KEY
npx wrangler secret put MFP_CLIENT_ID
npx wrangler secret put MFP_CLIENT_SECRET
npx wrangler deploy

Claude에서 연결하기

  1. Settings → Connectors → Add custom connector.

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

  3. Connect를 클릭 → MyFitnessPal 이메일/사용자 이름과 비밀번호로 로그인 → 완료.

그런 다음: "MyFitnessPal에서 진단을 실행한 다음 어제의 영양 정보를 보여줘."

커넥터 아이콘

Worker는 MCP serverInfo.icons(및 websiteUrl)에서 PUBLIC_URL/icon.png를 광고하므로, 서버 브랜딩을 렌더링하는 클라이언트는 커넥터 목록에 이 아이콘을 표시합니다. 기본값은 생성된 접시와 식기 아이콘(npm run icon)입니다. 대신 공식 MyFitnessPal 앱 아이콘을 사용하려면 App Store / Play Store 목록에서 PNG를 저장하여 다음과 같이 포함하세요:

npm run icon:embed -- ~/Downloads/myfitnesspal-icon.png   # writes src/icon.ts + assets/icon.png
npm run deploy

(공식 마크는 MyFitnessPal의 상표입니다 — 개인 배포에는 괜찮지만 재배포에는 적합하지 않으며, 그래서 이 저장소에 포함되어 있지 않습니다.)

로컬 개발

cp .dev.vars.example .dev.vars   # set the secrets
npm run dev                      # http://localhost:8787
npm test                         # vitest (fake identity + API backend)
npm run typecheck
npm run icon

참고 사항 및 제한

  • 비공식. 앱의 비공개 클라이언트가 개인 사용 목적으로 자신의 자격 증명과 함께 사용됩니다. MFP는 클라이언트를 교체하거나 API를 변경할 수 있습니다.

  • Health Connect는 이미 MFP 식사 요약을 Google Health에 동기화합니다. 이 서버가 추가하는 것은 타임스탬프, 미량 영양소, 수분, MFP 운동 및 체중이 포함된 음식별 기록입니다.

  • 영양소 목표에 대한 확인된 엔드포인트는 아직 없습니다 — run_diagnostics가 후보를 탐색하고 query_endpoint로 조사할 수 있습니다.

  • 하위 요청 제한. 모든 다이어리 날짜는 업스트림 호출 1회입니다. Workers 무료 요금제(요청당 하위 요청 50회)에서는 캐시되지 않은 기간을 짧게 유지하세요. 캐시된 날짜는 비용이 저렴합니다.

  • 비밀번호 변경은 갱신 토큰을 무효화합니다 — 커넥터를 연결 해제한 후 다시 연결하세요.

개인정보 보호

  • 비밀번호는 토큰과 한 번 교환되며 저장되지 않습니다. 갱신 토큰은 OAuth grant 내부에 암호화된 채로 보관됩니다.

  • 다이어리 데이터는 자신의 KV 네임스페이스에만 캐시되며 봉인되어 있고 delete_my_data로 삭제할 수 있습니다. 어떤 제3자에게도 전송되지 않습니다.

라이선스

MIT

A
license - permissive license
Not graded
quality - not tested
B
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

View all related MCP servers

Related MCP Connectors

  • Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.

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

  • Connect Claude to Fathom meeting recordings, transcripts, and summaries

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/a1dancole/myfitnesspal-mcp'

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