MyFitnessPal MCP
MyFitnessPal MCP — Claude 트레이닝 코치를 위한 영양 데이터
Cloudflare Workers에 배포된 원격 MCP 서버로, 당신의 MyFitnessPal 다이어리 — 모든 음식의 1회 제공량과 시간, 끼니별 및 일일 에너지·매크로·마이크로 영양소 합계, 수분, 기록된 운동, 걸음 수, 체중 — 를 Claude에 노출합니다. 커스텀 커넥터로 한 번 추가하면 Claude 웹, 데스크톱, 모바일에서 모두 작동합니다. Strava, Google Health, Renpho 커넥터와 함께 사용하면 코치가 훈련 부하, 회복, 체성분 그리고 영양 공급을 모두 볼 수 있습니다.
MFP와 통신하는 방식: MyFitnessPal에는 공개 API가 없습니다(파트너 프로그램은 폐쇄됨). 이 서버는 모바일 앱 자체 OAuth ID 흐름과 앱이 사용하는 동일한
api.myfitnesspal.com/v2API를 사용합니다 — myfitnesspalapi.com에 보관된 파트너 문서가 설명하는 그 API입니다. 브라우저, 쿠키, 스크래핑, 캡차가 없습니다. ID 흐름에 대한 크레딧: seonixx/myfitnesspal 및 jnelle/MyFitnesspal-API-Golang. 비공식이며 MFP는 언제든 변경할 수 있습니다.
도구
도구 | 답변 내용 |
| "오늘 무엇을 먹었나?" — 끼니별 및 일일 합계(에너지, 단백질, 탄수화물, 순탄수화물, 식이섬유, 당, 지방 하위 유형, 콜레스테롤, 나트륨, 칼륨, %DV 미량 영양소), 모든 음식의 1회 제공량 및 타임스탬프, 수분, 운동, 걸음 수, 체중 기록 |
| 기간에 따른 개별 음식 기록, 끼니 또는 텍스트 검색으로 필터 가능 — 운동 세션 전후에 먹은 음식, 반복적으로 나타나는 음식 |
| 기간에 따른 일일 합계, 기록된 날짜 기준 평균, 최소/최대 에너지, 단백질·탄수화물·지방 에너지 비율, 주간 평균, 수분/운동/걸음 수 |
| MFP에 기록된 운동(시간, 칼로리, 거리, 심박수) 및 일일 걸음 수 |
| MFP에 기록된 체중 항목 |
| 이름, 성별, 생년월일/나이, 키, 로케일 + 토큰 상태 |
| 종단 간 점검: 토큰 갱신, 프로필, 계정이 허용하는 다이어리 types/fields 조합(원본 샘플 포함), 측정 항목, 후보 목표 엔드포인트 |
| 탈출구: 커넥터의 인증을 적용하여 모든 |
| 캐시된 날짜와 기억된 요청 형태 삭제, 토큰 갱신 |
| 계정에 캐시된 모든 데이터 삭제 |
문제 해결: 도구에서 오류가 발생하거나 데이터가 누락된 것처럼 보이면 먼저
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 페이지에서 한 번)
POST identity-api.myfitnesspal.com/oauth/token— 모바일 앱의 OAuth 클라이언트에 대한 client-credentials 토큰.GET identity-api…/clientKeys— MFP가 비밀번호 로그인에 사용하는 HS512 서명 키.POST identity-api…/oauth/authorize에credentials=<JWT{username, password}>포함 —mfp://identity/callback?code=…로의 리디렉션 반환.POST …/oauth/token(authorization_code) — access + refresh + id 토큰.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_ID와 MFP_CLIENT_SECRET으로 설정하세요. MFP가 이를 교체하면 업데이트할 때까지 로그인이 작동하지 않습니다.
배포
옵션 A — GitHub Actions
.github/workflows/deploy.yml은 master로 push할 때마다 배포합니다. 비밀 값은 Cloudflare에 있으며 GitHub에는 CLOUDFLARE_API_TOKEN과 CLOUDFLARE_ACCOUNT_ID만 보관됩니다.
두 개의 KV 네임스페이스(
MFP_OAUTH_KV,MFP_CACHE)를 만들고 그 id를wrangler.jsonc에 넣으세요.두 개의 GitHub 비밀 값을 추가하고 push하세요.
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 deployClaude에서 연결하기
Settings → Connectors → Add custom connector.
URL:
https://myfitnesspal-mcp.<subdomain>.workers.dev/mcpConnect를 클릭 → 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
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 gradedqualityDmaintenanceEnables AI assistants to read and write MyFitnessPal data, including food diary, exercises, body measurements, nutrition goals, and water intake.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read and log MyFitnessPal nutrition data, including tracking calories, macros, searching foods, and adding meals through natural conversation.34MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with MyFitnessPal data including food diary, exercises, body measurements, nutrition goals, and water intake through natural language.2045MIT
- AlicenseNot gradedqualityAmaintenanceConnect MyFitnessPal to Claude or any MCP client. Log meals, search food database with macros, track trends, and export nutrition history against your real MyFitnessPal diary.6MIT
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
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/a1dancole/myfitnesspal-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server