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 Diary group in Cronometer. It also reads your nutrient totals and targets, and adds weigh-ins, exercise and notes. It works inside Claude and ChatGPT, with no developer setup.
14 tools Read and write
Cronometer has no public API (checked 6 Nov 2026). Its Pro FAQ says Everfit, Kalix and Practice Better have access to its API and that select nutrition data can be reached through those platforms. We found no official Cronometer MCP server and no Cronometer app for Claude or ChatGPT. Cotlet runs 14 Cronometer tools hosted, over MCP for agents and REST for scripts, in your own login with no API key from Cronometer.
| What you need | Cronometer partner API | GitHub MCP server | Cotlet |
|---|---|---|---|
| Read a day of your diary | Select data, via partners | Yes | Yes |
| Log food into your diary | Not offered | Yes | Yes |
| Open to an individual | Partners and Enterprise | Yes | Yes |
| Works in the Claude and ChatGPT apps | No connector | Yes, you run it | Yes, hosted |
| Nothing to install or host | Via a partner app | No | Yes |
Checked 6 Nov 2026. Sources: Cronometer Pro FAQ · Cronometer Gold and the free version · Cronometer community: public API requests · GitHub: rwestergren/cronometer-api-mcp
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 Cronometer 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 Cronometer on for agents. Create a Cotlet account, log in to Cronometer 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 Cronometer next to your other apps. If you enable Cronometer 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-cronometer \
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-cronometer": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-cronometer]
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: cronometer_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: cronometer_write Logging a food needs the food_id from a search and the name of one of your Diary groups. Every entry has an entry_id that delete_entry takes.
Returns one day of the diary as Cronometer shows it. Foods come grouped by the Diary groups of your account, in the order of the diary, with amount, calories and protein per entry and the day totals. Each entry has an entry_id that delete_entry takes. Dates are in the account time zone. An empty day returns empty groups and zero totals.
MCP callcronometer_read → get_diary_day
REST endpointGET https://cotlet.dev/api/v1/cronometer/diary-day
| Name | Type | Description |
|---|---|---|
| date date | date | The day to read, YYYY-MM-DD. Default: today. |
{
"date": "2026-11-05",
"groups": [
{
"group": "Breakfast",
"entries": [
{
"entry_id": "e1f20a",
"food": "Oatmeal with berries",
"amount": "1 bowl",
"calories": 320,
"protein_g": 12
}
]
},
{
"group": "Lunch",
"entries": [
{
"entry_id": "e1f20b",
"food": "Chicken and rice bowl",
"amount": "1 bowl",
"calories": 540,
"protein_g": 46
}
]
},
{
"group": "Dinner",
"entries": [
{
"entry_id": "e1f20c",
"food": "Salmon with potatoes",
"amount": "1 plate",
"calories": 410,
"protein_g": 35
}
]
}
],
"exercise": [],
"biometrics": [
{
"name": "Weight",
"value": 72.4,
"unit": "kg"
}
],
"notes": [],
"totals": {
"calories": 1270,
"protein_g": 93
}
} Returns up to 20 matches for the query, your custom foods first, then database foods. Each match has a food_id for log_food, the serving sizes Cronometer offers and the calories of the default serving. Matches carry the source shown in the app, so you can tell a verified food from a user-made one.
MCP callcronometer_read → search_foods
REST endpointGET https://cotlet.dev/api/v1/cronometer/foods/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Food name, for example grilled chicken breast. |
| limit integer | integer | 1 to 20. Default: 20. |
{
"query": "query"
} {
"foods": [
{
"food_id": "f81d20",
"name": "Chicken breast, grilled",
"source": "Database",
"default_serving": "100 g",
"calories": 165
},
{
"food_id": "f81d27",
"name": "Rice, brown, cooked",
"source": "Database",
"default_serving": "1 cup",
"calories": 218
}
]
} Returns the custom foods saved in your account, newest first, with food_id, serving size, calories and protein. Use food_id with log_food. Only your own items are listed; foods shared by other users are not.
MCP callcronometer_read → list_custom_foods
REST endpointGET https://cotlet.dev/api/v1/cronometer/custom-foods
| Name | Type | Description |
|---|---|---|
| query string | string | Only foods whose name contains this text. |
{
"foods": [
{
"food_id": "c2a901",
"name": "Overnight oats",
"serving": "100 g",
"calories": 380,
"protein_g": 14
},
{
"food_id": "c2a8f4",
"name": "Protein shake",
"serving": "1 scoop",
"calories": 120,
"protein_g": 24
}
]
} Adds one entry to your diary and returns it with its entry_id and the new day totals. food_id comes from search_foods or list_custom_foods. group is the name of a Diary group in your account; an unknown name fails and the error lists your groups. Nothing reaches other people and delete_entry removes the entry in one call, so it needs no confirmation by default.
MCP callcronometer_write → log_food
REST endpointPOST https://cotlet.dev/api/v1/cronometer/foods/{food_id}
| Name | Type | Description |
|---|---|---|
| food_id string required | string | Food id from search_foods or list_custom_foods. |
| amount number required | number | Amount in the unit below. |
| unit string required | string | A serving unit Cronometer offers for that food, for example g or cup. |
| group string required | string | Name of a Diary group, as shown in your diary. |
| date date | date | Day to log to, YYYY-MM-DD. Default: today. |
{
"food_id": "f81d20",
"amount": 150,
"unit": "g",
"group": "Lunch",
"date": "2026-11-05"
} {
"entry_id": "e1f20d",
"date": "2026-11-05",
"group": "Lunch",
"food": "Chicken breast, grilled",
"amount": "150 g",
"calories": 248,
"day_total_calories": 1518
} Creates a custom food in your account and returns its food_id. It is private to you and is not shared. Calories are required; other nutrients you leave out stay empty, never zero. It reaches no one, and the food can be deleted in Cronometer, so it needs no confirmation by default.
MCP callcronometer_write → create_custom_food
REST endpointPOST https://cotlet.dev/api/v1/cronometer/custom-foods
| Name | Type | Description |
|---|---|---|
| name string required | string | Name of the food. |
| serving string required | string | Serving size, for example 100 g. |
| calories number required | number | Calories per serving. |
| protein_g number | number | Protein per serving, grams. |
| carbs_g number | number | Carbohydrates per serving, grams. |
| fat_g number | number | Fat per serving, grams. |
{
"name": "Jane Doe",
"serving": "serving",
"calories": 1
} {
"food_id": "c2a901",
"name": "Overnight oats",
"serving": "100 g",
"calories": 380,
"protein_g": 14
} Deletes the single entry with that entry_id and returns what was removed. It never deletes a whole day or a custom food. Run get_diary_day or one of the list tools first to find the id. The entry is private to your account, so no one else is affected, and you can log it again, so it needs no confirmation by default.
MCP callcronometer_write → delete_entry
REST endpointDELETE https://cotlet.dev/api/v1/cronometer/entries/{entry_id}
| Name | Type | Description |
|---|---|---|
| entry_id string required | string | Entry id from get_diary_day or a list tool. |
| type enum required | enum | food, exercise, biometric or note. |
{
"entry_id": "entry_8c41d2",
"type": "food"
} {
"deleted": true,
"entry_id": "e1f20d",
"type": "food",
"food": "Chicken breast, grilled",
"date": "2026-11-05"
} Cronometer limits free reports and charts to a 7-day window, so longer ranges need Gold (Cronometer Gold page, 6 Nov 2026). Targets are read only.
Returns one row per day between start and end, oldest first, with the totals of the nutrients you ask for and the target set for each. A day with nothing logged is returned with zero totals so gaps are visible. On the free plan Cronometer limits reports and charts to a 7-day window, and Gold removes that limit, so longer ranges need Gold.
MCP callcronometer_read → get_nutrition_summary
REST endpointGET https://cotlet.dev/api/v1/cronometer/nutrition-summary
| Name | Type | Description |
|---|---|---|
| start date required | date | First day, YYYY-MM-DD. |
| end date required | date | Last day, YYYY-MM-DD. |
| nutrients string[] | string[] | Nutrient names as Cronometer shows them, for example calories, protein, fibre. Default: calories and protein. |
{
"start": "2026-10-01",
"end": "2026-10-01"
} {
"nutrients": [
"calories",
"protein_g"
],
"days": [
{
"date": "2026-11-03",
"calories": 1980,
"protein_g": 121
},
{
"date": "2026-11-04",
"calories": 2140,
"protein_g": 98
},
{
"date": "2026-11-05",
"calories": 1270,
"protein_g": 93
}
],
"targets": {
"calories": 2000,
"protein_g": 120
}
} Returns the custom targets of your account for energy, macros and micronutrients, as Cronometer lists them under your targets. If you use the Macro Scheduler (Gold), the targets differ by weekday and the call returns the ones for the date you pass. Read-only: targets are changed in Cronometer.
MCP callcronometer_read → get_targets
REST endpointGET https://cotlet.dev/api/v1/cronometer/targets
| Name | Type | Description |
|---|---|---|
| date date | date | Day to read targets for, YYYY-MM-DD. Default: today. |
{
"date": "2026-11-05",
"targets": [
{
"nutrient": "Energy",
"amount": 2000,
"unit": "kcal"
},
{
"nutrient": "Protein",
"amount": 120,
"unit": "g"
},
{
"nutrient": "Fiber",
"amount": 30,
"unit": "g"
}
]
} Custom biometrics exist only if you created them on Gold. Weigh-ins use the unit of your account.
Returns biometric entries between start and end, newest first, with name, value, unit and the entry_id that delete_entry takes. name filters to one biometric as Cronometer names it. Custom biometrics appear only if the account is on Gold, which is where Cronometer lets you create them.
MCP callcronometer_read → list_biometrics
REST endpointGET https://cotlet.dev/api/v1/cronometer/biometrics
| Name | Type | Description |
|---|---|---|
| start date required | date | First day, YYYY-MM-DD. |
| end date required | date | Last day, YYYY-MM-DD. |
| name string | string | One biometric by its Cronometer name, for example Weight. Default: all. |
{
"start": "2026-10-01",
"end": "2026-10-01"
} {
"biometrics": [
{
"entry_id": "b7c301",
"date": "2026-11-05",
"name": "Weight",
"value": 72.4,
"unit": "kg"
},
{
"entry_id": "b7c2ff",
"date": "2026-10-29",
"name": "Weight",
"value": 72.9,
"unit": "kg"
}
]
} Adds one biometric entry and returns it with its entry_id. name must be a biometric your account has, as Cronometer shows it; a custom biometric exists only if you created it on Gold. An unknown name fails and the error lists your biometrics. It reaches no one and delete_entry undoes it in one call, so it needs no confirmation by default.
MCP callcronometer_write → log_biometric
REST endpointPOST https://cotlet.dev/api/v1/cronometer/biometrics
| Name | Type | Description |
|---|---|---|
| name string required | string | Biometric name, for example Weight. |
| value number required | number | The value, in your account unit for that biometric. |
| date date | date | Day, YYYY-MM-DD. Default: today. |
{
"name": "Jane Doe",
"value": 1
} {
"entry_id": "b7c302",
"date": "2026-11-05",
"name": "Weight",
"value": 72.4,
"unit": "kg"
} Returns the exercise entries between start and end, newest first, with name, minutes and calories burned. Workouts synced from a device and entries you logged by hand are both listed. Each has an entry_id that delete_entry takes.
MCP callcronometer_read → list_exercises
REST endpointGET https://cotlet.dev/api/v1/cronometer/exercises
| Name | Type | Description |
|---|---|---|
| start date required | date | First day, YYYY-MM-DD. |
| end date required | date | Last day, YYYY-MM-DD. |
{
"start": "2026-10-01",
"end": "2026-10-01"
} {
"exercises": [
{
"entry_id": "x4410",
"date": "2026-11-04",
"name": "Running",
"minutes": 35,
"calories_burned": 360
}
]
} Adds one exercise entry and returns it with its entry_id. Calories burned come from Cronometer unless you pass calories_burned. It reaches no one and delete_entry undoes it in one call, so it needs no confirmation by default.
MCP callcronometer_write → log_exercise
REST endpointPOST https://cotlet.dev/api/v1/cronometer/exercises
| Name | Type | Description |
|---|---|---|
| name string required | string | Exercise name, for example Running. |
| minutes integer required | integer | Duration in minutes. |
| calories_burned number | number | Override the calories Cronometer estimates. |
| date date | date | Day, YYYY-MM-DD. Default: today. |
{
"name": "Jane Doe",
"minutes": 1
} {
"entry_id": "x4411",
"date": "2026-11-05",
"name": "Running",
"minutes": 35,
"calories_burned": 360
} Returns the notes you wrote on diary days between start and end, newest first, with the entry_id that delete_entry takes. Notes are plain text.
MCP callcronometer_read → list_notes
REST endpointGET https://cotlet.dev/api/v1/cronometer/notes
| Name | Type | Description |
|---|---|---|
| start date required | date | First day, YYYY-MM-DD. |
| end date required | date | Last day, YYYY-MM-DD. |
{
"start": "2026-10-01",
"end": "2026-10-01"
} {
"notes": [
{
"entry_id": "n0921",
"date": "2026-11-04",
"text": "Slept badly, skipped the morning run."
}
]
} Adds one plain-text note to the day and returns it with its entry_id. Notes are private to your account. It reaches no one and delete_entry undoes it in one call, so it needs no confirmation by default.
MCP callcronometer_write → add_note
REST endpointPOST https://cotlet.dev/api/v1/cronometer/notes
| Name | Type | Description |
|---|---|---|
| text string required | string | The note. |
| date date | date | Day, YYYY-MM-DD. Default: today. |
{
"text": "text"
} {
"entry_id": "n0922",
"date": "2026-11-05",
"text": "Felt full after lunch, added a snack later."
} Your logged-in Cronometer profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 14 Cronometer tools. Never the cookie.
Your diary, targets, biometrics, exercise, notes and custom foods.
Gold plan, payment, password, two-factor and deleting your account.
The code prompt goes to you. You type it in, we never do.
Disable for agents, reset the browser, or log out of Cronometer.
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.
When Cronometer moves a screen or renames a field, 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 | delete_entry, one entry per call |
| Log exercise | delete_entry |
| Log a biometric | delete_entry |
| Add a note | delete_entry |
| Create a custom food | Delete it in Cronometer; it is private to you |
None of the 14 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": "f81d20",
"amount": 150,
"unit": "g",
"group": "Lunch",
"date": "2026-11-05"
}
} curl -X POST https://cotlet.dev/api/v1/cronometer/foods/f81d20 \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":150,"unit":"g","group":"Lunch","date":"2026-11-05"}' {
"entry_id": "e1f20d",
"date": "2026-11-05",
"group": "Lunch",
"food": "Chicken breast, grilled",
"amount": "150 g",
"calories": 248,
"day_total_calories": 1518
} Scripts and cron jobs reach the same tools over REST at /api/v1/cronometer, with the same key and price. A failed call costs nothing. The tools table lists the REST path of each tool.
About $34 a monthfor logging 6 foods a day with a weigh-in, 5,820 credits. Your Cronometer plan is billed by Cronometer as before.
| Job | Calls | Credits |
|---|---|---|
| Log a day of meals from your words, daily | 13 × 30 | 3,900 |
| Log a weigh-in, daily | 1 × 30 | 300 |
| Weekly review: 7-day totals, targets, weights | 3 × 4 | 120 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 5,820 |
The month is our example. Cronometer publishes no average for foods logged a day, so we assume 6, each with one search call and one log call, plus one diary check. The weekly review covers 7 days, the window Cronometer gives free reports. 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 |
|---|---|---|
| rwestergren/cronometer-api-mcp | 19 tools for food log, nutrition, food search, diary entries, custom foods, recipes, targets, fasting and biometrics. 70 stars, MIT, last commit 2 Nov 2026. | Runs on your computer. Claude on the web, your phone and ChatGPT need you to host it. |
| cphoskins/cronometer-mcp | PyPI package with food log, micronutrients, diary entries, recurring foods, targets, fasting, biometrics and CSV export. 28 stars, MIT, last commit 1 Nov 2026. | Local, you keep it running. Its README asks for a Gold account. |
| ekelly95/cronometer-mcp | npm package with the full diary, targets and writes with approval. 0 stars, MIT, last commit 18 Oct 2026. | Set up on your computer, single maintainer. |
| cronometer-mcp.dev | Hosted remote server with 16 tools, sign-in in the browser, open source. | A third-party service; price not listed on the page. |
| milldr/crono | Command line tool that quick-adds macros through browser automation. 44 stars, MIT, last commit 5 Nov 2026. | Not an MCP server, and it adds macros only. |
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 Cronometer tools.
Sign up at cotlet.dev, log in to Cronometer 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 Cronometer account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Cronometer: log a meal from a plain description; weekly nutrition summary against targets; plan the rest of the day to hit protein. 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 Cronometer under Integrations in the console and log in to Cronometer in its Cloud Browser. The trial starts with your first app, no card asked.
No for the diary tools. Cronometer lists logging of foods, exercise, biometrics and notes, custom targets, custom foods and recipes in the free version. Gold adds custom biometrics, timestamps and reports without the free 7-day window, so longer summaries and custom biometrics need Gold (Cronometer Gold page, checked 6 Nov 2026).
Not a public one. As of 6 Nov 2026 the Cronometer Pro FAQ names Everfit, Kalix and Practice Better as platforms with API access, and we found no official MCP server. Cotlet gives you the diary tools in Claude or ChatGPT without a developer key.
Yes. Cotlet works in the Cronometer website in your own Cloud Browser, where the diary is at cronometer.com, so you need no app on the phone.
Only the door is different. Both expose the same 14 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 Cronometer.
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