Health & fitness
Trainerize
Clients, programs, check-ins and messages for your Trainerize business.
14 endpoints
Tell your agent what you ate and it finds the foods and logs them to the right meal in MyFitnessPal. It also logs water, weight and exercise and reads your diary and goals back. It works inside Claude and ChatGPT, with no developer setup.
15 tools Read and write
MyFitnessPal's API site says "We are not accepting requests for API access at this time" (checked 6 Nov 2026). Its own app in ChatGPT, live since 7 Jan 2026, answers nutrition questions, and the launch post says logging meals there is not available. We found no MyFitnessPal connector for Claude. Cotlet runs 15 MyFitnessPal tools hosted, over MCP for agents and REST for scripts, in your own login with no API key from MyFitnessPal.
| What you need | MyFitnessPal in ChatGPT | GitHub MCP server | Cotlet |
|---|---|---|---|
| Search foods and read their nutrition | Yes | Yes | Yes |
| Log a meal to your diary | Not in the launch post | Yes | Yes |
| Read your diary and goals | No account link at launch | Yes | Yes |
| Works in Claude | ChatGPT only | Yes, you run it | Yes, hosted |
| Nothing to install or host | Yes | No | Yes |
Checked 6 Nov 2026. Sources: MyFitnessPal API site · MyFitnessPal blog: MyFitnessPal + ChatGPT · GitHub: Mason-Levyy/myfitnesspal-mcp · npm: n8n MyFitnessPal community node
Use your own account in its Cotlet Cloud Browser.
Add the Cotlet address to Claude or ChatGPT.
Say what you ate or what you want to know.
We never keep your MyFitnessPal password, and no tool touches your payment, password or account. Who can see your session
Pick your client in the tabs. The steps are the same everywhere.
Turn MyFitnessPal on for agents. Create a Cotlet account, log in to MyFitnessPal in its Cloud Browser, then press Enable for agents.
Add the Cotlet address. Put https://cotlet.dev/mcp/v1 in the MCP or connector settings of your agent.
Sign in or use a key. Claude and ChatGPT ask you to sign in to Cotlet. Cursor, Codex, n8n and scripts take an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, carries MyFitnessPal next to your other apps. If you enable MyFitnessPal after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-myfitnesspal \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-myfitnesspal": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-myfitnesspal]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: myfitnesspal_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: myfitnesspal_write Quick Add takes calories only on the free plan; protein, carbs and fat need Premium (MyFitnessPal Help, 6 Nov 2026). Logging a food needs the food_id from a search.
Returns the meals of that day. Each food has an entry_id, a name, a serving and its calories and macros. The totals are the ones MyFitnessPal shows for the day. A day with nothing logged returns empty meals.
MCP callmyfitnesspal_read → get_diary_day
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/diary-day
| Name | Type | Description |
|---|---|---|
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"date": "2026-11-04",
"meals": [
{
"meal": "Breakfast",
"entries": [
{
"entry_id": "e_1042",
"food": "Egg, whole, large",
"serving": "2 large",
"calories": 143,
"protein_g": 12.6,
"carbs_g": 0.7,
"fat_g": 9.5
},
{
"entry_id": "e_1043",
"food": "Whole wheat bread",
"serving": "1 slice",
"calories": 81,
"protein_g": 4,
"carbs_g": 13.8,
"fat_g": 1.1
}
]
},
{
"meal": "Lunch",
"entries": [
{
"entry_id": "e_1051",
"food": "Chicken salad",
"serving": "1 bowl",
"calories": 320,
"protein_g": 28,
"carbs_g": 12,
"fat_g": 17
}
]
}
],
"totals": {
"calories": 544,
"protein_g": 44.6,
"carbs_g": 26.5,
"fat_g": 27.6
}
} Returns matching foods. Each result has a food_id, a name, a brand when the food has one, and its default serving with calories. Pass food_id to get_food for the full nutrition and the other servings.
MCP callmyfitnesspal_read → search_foods
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/foods/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Food name or brand, for example "greek yogurt". |
| cursor string | string | Next page cursor from the previous call. |
{
"query": "query"
} {
"foods": [
{
"food_id": "f_88120",
"name": "Greek Yogurt, Plain, Nonfat",
"brand": "Example Dairy",
"serving": "170 g",
"calories": 100
},
{
"food_id": "f_88121",
"name": "Greek Yogurt, Plain",
"brand": null,
"serving": "1 cup",
"calories": 130
}
],
"next_cursor": null
} Returns the food's name, brand and every serving the food page lists, each with calories, protein, carbs and fat. Use it before log_food to choose a serving.
MCP callmyfitnesspal_read → get_food
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/foods/{food_id}
| Name | Type | Description |
|---|---|---|
| food_id string required | string | Food ID from search_foods. |
{
"food_id": "food_8c41d2"
} {
"food_id": "f_88120",
"name": "Greek Yogurt, Plain, Nonfat",
"brand": "Example Dairy",
"servings": [
{
"serving": "170 g",
"calories": 100,
"protein_g": 17,
"carbs_g": 6,
"fat_g": 0
},
{
"serving": "100 g",
"calories": 59,
"protein_g": 10,
"carbs_g": 3.5,
"fat_g": 0
}
]
} Returns each saved meal with its meal_id, name and total calories. Saved meals belong to your account. Pass meal_id to log_saved_meal.
MCP callmyfitnesspal_read → list_saved_meals
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/saved-meals
No parameters.
{
"saved_meals": [
{
"meal_id": "m_301",
"name": "Weekday lunch",
"calories": 540
},
{
"meal_id": "m_302",
"name": "Post-workout shake",
"calories": 280
}
]
} Adds the food to the meal and day you name and returns the new entry_id with its calories. It reaches no one, and delete_diary_entry undoes it in one call, so it does not wait for your OK. A serving that the food does not offer fails and the error lists the servings it has.
MCP callmyfitnesspal_write → log_food
REST endpointPOST https://cotlet.dev/api/v1/myfitnesspal/foods/{food_id}
| Name | Type | Description |
|---|---|---|
| food_id string required | string | Food ID from search_foods. |
| meal string required | string | Meal name as your diary shows it, for example Breakfast, Lunch, Dinner or Snacks. |
| serving string | string | Serving from get_food, for example "170 g". Defaults to the food's default serving. |
| quantity number | number | Number of servings. Defaults to 1. |
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"food_id": "f_88120",
"meal": "Snacks",
"serving": "170 g",
"quantity": 1,
"date": "2026-11-04"
} {
"entry_id": "e_1060",
"meal": "Snacks",
"food": "Greek Yogurt, Plain, Nonfat",
"serving": "170 g",
"quantity": 1,
"calories": 100,
"date": "2026-11-04"
} Adds every food of the saved meal to the meal and day you name and returns the new entry IDs and the calories added. It reaches no one, and delete_diary_entry undoes it entry by entry, so it does not wait for your OK.
MCP callmyfitnesspal_write → log_saved_meal
REST endpointPOST https://cotlet.dev/api/v1/myfitnesspal/meals/{meal_id}/saved-meals
| Name | Type | Description |
|---|---|---|
| meal_id string required | string | Meal ID from list_saved_meals. |
| meal string required | string | Meal name as your diary shows it, for example Breakfast, Lunch, Dinner or Snacks. |
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"meal_id": "meal_8c41d2",
"meal": "meal"
} {
"entry_ids": [
"e_1071",
"e_1072",
"e_1073"
],
"meal": "Lunch",
"saved_meal": "Weekday lunch",
"calories": 540,
"date": "2026-11-04"
} Adds a Quick Add entry to the meal and day you name. On the free plan MyFitnessPal takes calories only, and a call with grams fails. It reaches no one, and delete_diary_entry undoes it, so it does not wait for your OK.
MCP callmyfitnesspal_write → quick_add_calories
REST endpointPOST https://cotlet.dev/api/v1/myfitnesspal/add-calories/quick
| Name | Type | Description |
|---|---|---|
| meal string required | string | Meal name as your diary shows it, for example Breakfast, Lunch, Dinner or Snacks. |
| calories number required | number | Calories to add. |
| protein_g number | number | Protein in grams. Needs Premium. |
| carbs_g number | number | Carbs in grams. Needs Premium. |
| fat_g number | number | Fat in grams. Needs Premium. |
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"meal": "meal",
"calories": 1
} {
"entry_id": "e_1080",
"meal": "Dinner",
"calories": 650,
"date": "2026-11-04"
} Removes the entry and returns what was removed, so you can log it again. It touches only your own diary and reaches no one, so it does not wait for your OK.
MCP callmyfitnesspal_write → delete_diary_entry
REST endpointDELETE https://cotlet.dev/api/v1/myfitnesspal/entries/{entry_id}/diary-entries
| Name | Type | Description |
|---|---|---|
| entry_id string required | string | Entry ID from get_diary_day. |
{
"entry_id": "entry_8c41d2"
} {
"entry_id": "e_1060",
"removed": "Greek Yogurt, Plain, Nonfat",
"meal": "Snacks",
"calories": 100,
"date": "2026-11-04"
} Weight and water use the unit your account uses. The exercise tool logs cardio by name and minutes, not sets and reps.
Returns the total water logged for that day in the unit your account uses. A day with no water logged returns 0.
MCP callmyfitnesspal_read → get_water
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/water
| Name | Type | Description |
|---|---|---|
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"date": "2026-11-04",
"unit": "ml",
"total": 1250
} Adds the amount to that day's water and returns the new total. It reaches no one and you can log a correcting amount, so it does not wait for your OK.
MCP callmyfitnesspal_write → log_water
REST endpointPOST https://cotlet.dev/api/v1/myfitnesspal/waters
| Name | Type | Description |
|---|---|---|
| amount number required | number | Amount to add in the unit your account uses (get_water returns it). |
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"amount": 1
} {
"date": "2026-11-04",
"unit": "ml",
"added": 500,
"total": 1750
} Returns one entry per logged weight with its date and value in the unit your account uses. Days with no weight are left out.
MCP callmyfitnesspal_read → get_weight_entries
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/weight-entries
| Name | Type | Description |
|---|---|---|
| from string required | string | First day as YYYY-MM-DD. |
| to string required | string | Last day as YYYY-MM-DD. |
{
"from": "from",
"to": "to"
} {
"unit": "kg",
"entries": [
{
"date": "2026-10-29",
"weight": 79.1
},
{
"date": "2026-11-01",
"weight": 78.8
},
{
"date": "2026-11-04",
"weight": 78.4
}
]
} Records the weight for that day and returns it with the previous entry. MyFitnessPal uses your current weight in its calorie calculations. It reaches no one and a new call corrects it, so it does not wait for your OK.
MCP callmyfitnesspal_write → log_weight
REST endpointPOST https://cotlet.dev/api/v1/myfitnesspal/weights
| Name | Type | Description |
|---|---|---|
| weight number required | number | Weight in the unit your account uses. |
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"weight": 1
} {
"date": "2026-11-04",
"unit": "kg",
"weight": 78.4,
"previous": {
"date": "2026-11-01",
"weight": 78.8
}
} Returns each exercise with its entry_id, name, minutes and calories burned where MyFitnessPal gives them. Strength training has sets, reps and weight instead, and MyFitnessPal does not count calories burned for it. Steps are not returned: MyFitnessPal reads them from a connected app or device.
MCP callmyfitnesspal_read → list_exercises
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/exercises
| Name | Type | Description |
|---|---|---|
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"date": "2026-11-03",
"exercises": [
{
"entry_id": "x_204",
"name": "Running",
"minutes": 40,
"calories_burned": 410
},
{
"entry_id": "x_205",
"name": "Bench press",
"sets": 3,
"reps": 10,
"weight_kg": 60,
"calories_burned": null
}
]
} Adds the exercise to the day and returns the entry with the calories MyFitnessPal credits for it. Strength training with sets, reps and weight is not logged by this tool. It reaches no one, and delete_diary_entry undoes it, so it does not wait for your OK.
MCP callmyfitnesspal_write → log_exercise
REST endpointPOST https://cotlet.dev/api/v1/myfitnesspal/exercises
| Name | Type | Description |
|---|---|---|
| name string required | string | Exercise name as MyFitnessPal lists it, for example Running. |
| minutes integer required | integer | Duration in minutes. |
| date string | string | Diary day as YYYY-MM-DD. Defaults to today in your account time zone. |
{
"name": "Jane Doe",
"minutes": 1
} {
"entry_id": "x_210",
"name": "Running",
"minutes": 40,
"calories_burned": 410,
"date": "2026-11-03"
} Read only. MyFitnessPal sets fat, carb and protein goals as percentages of calories in 5% steps (MyFitnessPal Help, 6 Nov 2026).
Returns the calorie goal and the protein, carbs and fat goals set under Goals in your account. On the free plan the macro goals are percentages of calories; Premium can set grams. The response says which kind the account uses.
MCP callmyfitnesspal_read → get_nutrition_goals
REST endpointGET https://cotlet.dev/api/v1/myfitnesspal/nutrition-goals
No parameters.
{
"calories": 2100,
"macros": {
"protein": {
"percent": 25
},
"carbs": {
"percent": 50
},
"fat": {
"percent": 25
}
},
"goal_type": "percent"
} Your logged-in MyFitnessPal profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 15 MyFitnessPal tools. Never the cookie.
Your diary, goals, weights, water, exercise and saved meals.
Premium plan, payment, password, two-factor and deleting your account.
A code goes to you. You type it in, we never do.
Disable for agents, reset the browser, or log out of MyFitnessPal.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.
MyFitnessPal has just redesigned its home screen: the Diary became the Today tab (MyFitnessPal Help, 6 Nov 2026). When screens move or fields are renamed, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Log a food or a saved meal | delete_diary_entry, one entry per call |
| Quick add calories | delete_diary_entry |
| Log exercise | delete_diary_entry |
| Log water | Log a correcting amount |
| Log weight | Log the right weight; a new call corrects the day |
None of the 15 tools waits for your OK: every write lands in your own diary and reaches no one, and each one has an undo. Scheduled runs need no approval.
A wrong day or serving is a diary edit, not a lost record. Ask the agent to fix the entry or delete it.
{
"name": "log_food",
"arguments": {
"food_id": "f_88120",
"meal": "Snacks",
"serving": "170 g",
"quantity": 1,
"date": "2026-11-04"
}
} curl -X POST https://cotlet.dev/api/v1/myfitnesspal/foods/f_88120 \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"meal":"Snacks","serving":"170 g","quantity":1,"date":"2026-11-04"}' {
"entry_id": "e_1060",
"meal": "Snacks",
"food": "Greek Yogurt, Plain, Nonfat",
"serving": "170 g",
"quantity": 1,
"calories": 100,
"date": "2026-11-04"
} Scripts and cron jobs reach the same tools over REST at /api/v1/myfitnesspal, with the same key and price. A failed call costs nothing. The tools table lists the REST path of each tool.
About $37 a monthfor logging 6 foods a day with weight and water, 6,360 credits. Your MyFitnessPal plan is billed by MyFitnessPal as before.
| Job | Calls | Credits |
|---|---|---|
| Log a day of meals from your words, daily | 13 × 30 | 3,900 |
| Log weight and water, daily | 2 × 30 | 600 |
| Weekly review: 7 diary days, goals, weights | 9 × 4 | 360 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 6,360 |
The month is our example. A research dataset of MyFitnessPal diaries averages 5.86 foods a user-day, so we use 6, each with one search call and one log call. MyFitnessPal's own advertiser page says engaged US members log about 16, which would cost more. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Mason-Levyy/myfitnesspal-mcp | 19 tools for diary, food search, weight, water, exercise and trends. PyPI package mfp-mcp, 2,685 downloads last month, 30 stars, MIT, last commit 6 Nov 2026. | Runs on your computer. Claude on the web, your phone and ChatGPT need you to host it. |
| AdamWalt/myfitnesspal-mcp-python | Local server with about 20 tools, 70 stars, MIT, last commit 20 Oct 2026. | Local only, you keep it running. |
| delize/myfitness-mcp | Remote server for a Claude custom connector, Docker, 4 stars, last commit 31 Oct 2026. | You host it and refresh its login when it expires. |
| thesaaspreneur/myfitnesspal-mcp | 33 tools including custom foods and recipes, 0 stars, last commit 1 Sep 2026. | Local, single maintainer. |
| MyFitnessPal in ChatGPT | Official since 7 Jan 2026: recipes, calorie targets and macro advice from MyFitnessPal data. | ChatGPT only. The launch post says logging meals there is not available. |
| learntospeak.ai | Hosted connector with 14 tools, key based. | A third-party service; price not listed on the page. |
If you are happy to install a server and keep it running, a GitHub server is free. Cotlet is for people who want the same diary tools in Claude or ChatGPT with nothing to host, on any device, on a schedule if you like.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the MyFitnessPal tools.
Sign up at cotlet.dev, log in to MyFitnessPal once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your MyFitnessPal account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in MyFitnessPal: log meals from a text or photo description; add a daily nutrition summary to a spreadsheet; copy a usual meal to today. You ask in plain words, and anything that reaches other people waits for your OK first.
Create a free account at https://cotlet.dev, open MyFitnessPal under Integrations in the console and log in to MyFitnessPal in its Cloud Browser. The trial starts with your first app, no card asked.
Yes, since 7 Jan 2026. You write @myfitnesspal before a nutrition question. Its launch post says logging meals there is not available and may come in future versions, so Cotlet is the way to log from a chat today.
Yes. Cotlet works in the MyFitnessPal website in your own Cloud Browser, where the food diary is at myfitnesspal.com/food/diary, so you need no app on the phone.
Only the door is different. Both expose the same 15 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with MyFitnessPal.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy