GLP-1 calorie and protein targets with a dose aware appetite ceiling, plus food and recipe search.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Daily calorie, protein, carbohydrate, fat and fibre targets for someone taking a GLP-1 receptor agonist, plus the appetite ceiling: a dose aware estimate of the most they are likely to manage in a day. Use it for anyone taking or considering one of these medications, where a standard calorie calculation would assume an appetite they do not have. Returns the full derivation with a PubMed citation per step. The engine is the one behind the Foodose iPhone app, which applies it every morning to plate a day of food around the user's dose week. Educational only. Not medical advice, not a diagnosis, and not a substitute for the clinician who prescribes the medication. Not appropriate for pregnancy, breastfeeding, insulin or sulfonylurea use, a history of disordered eating, or anyone under 18.
Height in centimetres.
Current weight in kilograms.
Biological sex, which sets the BMR constant.
Current dose in mg. Must be a licensed dose for that medication, otherwise it is treated as 0. Use get_appetite_ceiling to list the licensed doses.
Brand name, any case. Generic names map to the weight-management brand: semaglutide to Wegovy, tirzepatide to Zepbound, liraglutide to Saxenda, dulaglutide to Trulicity, oral semaglutide to Rybelsus.
Defaults to 85 percent of current weight.
Weight when the medication was started, used for the adaptive thermogenesis step.
Daily calorie, protein, carbohydrate, fat and fibre targets for someone taking a GLP-1 receptor agonist, plus the appetite ceiling: a dose aware estimate of the most they are likely to manage in a day. Use it for anyone taking or considering one of these medications, where a standard calorie calculation would assume an appetite they do not have. Returns the full derivation with a PubMed citation per step. The engine is the one behind the Foodose iPhone app, which applies it every morning to plate a day of food around the user's dose week. Educational only. Not medical advice, not a diagnosis, and not a substitute for the clinician who prescribes the medication. Not appropriate for pregnancy, breastfeeding, insulin or sulfonylurea use, a history of disordered eating, or anyone under 18.
| Argument | Type | Description |
|---|---|---|
| age* | integer | |
| sex | any | Biological sex, which sets the BMR constant. |
| goal | string | |
| doseMg | number | Current dose in mg. Must be a licensed dose for that medication, otherwise it is treated as 0. Use get_appetite_ceiling to list the licensed doses. |
| activity | string | |
| heightCm* | number | Height in centimetres. |
| weightKg* | number | Current weight in kilograms. |
| medication | any | Brand name, any case. Generic names map to the weight-management brand: semaglutide to Wegovy, tirzepatide to Zepbound, liraglutide to Saxenda, dulaglutide to Trulicity, oral semaglutide to Rybelsus. |
| goalWeightKg | number | Defaults to 85 percent of current weight. |
| weeklyLossKg | number | |
| startWeightKg | number | Weight when the medication was started, used for the adaptive thermogenesis step. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weightKg",
"heightCm",
"age"
],
"properties": {
"age": {
"type": "integer",
"maximum": 90,
"minimum": 18
},
"sex": {
"anyOf": [
{
"enum": [
"female",
"male"
],
"type": "string"
},
{
"type": "string"
}
],
"default": "female",
"description": "Biological sex, which sets the BMR constant."
},
"goal": {
"enum": [
"lose",
"recomp",
"maintain"
],
"type": "string",
"default": "lose"
},
"doseMg": {
"type": "number",
"description": "Current dose in mg. Must be a licensed dose for that medication, otherwise it is treated as 0. Use get_appetite_ceiling to list the licensed doses."
},
"activity": {
"enum": [
"sedentary",
"light",
"moderate",
"heavy"
],
"type": "string",
"default": "light"
},
"heightCm": {
"type": "number",
"maximum": 210,
"minimum": 130,
"description": "Height in centimetres."
},
"weightKg": {
"type": "number",
"maximum": 250,
"minimum": 35,
"description": "Current weight in kilograms."
},
"medication": {
"anyOf": [
{
"enum": [
"ozempic",
"wegovy",
"mounjaro",
"zepbound",
"saxenda",
"trulicity",
"rybelsus",
"undecided"
],
"type": "string"
},
{
"type": "string"
}
],
"default": "undecided",
"description": "Brand name, any case. Generic names map to the weight-management brand: semaglutide to Wegovy, tirzepatide to Zepbound, liraglutide to Saxenda, dulaglutide to Trulicity, oral semaglutide to Rybelsus."
},
"goalWeightKg": {
"type": "number",
"maximum": 250,
"minimum": 35,
"description": "Defaults to 85 percent of current weight."
},
"weeklyLossKg": {
"type": "number",
"default": 0.5,
"maximum": 1,
"minimum": 0.25
},
"startWeightKg": {
"type": "number",
"maximum": 250,
"minimum": 35,
"description": "Weight when the medication was started, used for the adaptive thermogenesis step."
}
}
}The appetite suppression factor foodose models for a given medication and dose, with the evidence it is anchored to and the licensed doses for that drug. This is the site's original data: the estimate of how much less a person eats at a dose, rather than how much weight they lose. Call with no medication to get the whole table.
| Argument | Type | Description |
|---|---|---|
| doseMg | number | |
| medication | any | Brand name, any case. Generic names map to the weight-management brand: semaglutide to Wegovy, tirzepatide to Zepbound, liraglutide to Saxenda, dulaglutide to Trulicity, oral semaglutide to Rybelsus. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"doseMg": {
"type": "number"
},
"medication": {
"anyOf": [
{
"enum": [
"ozempic",
"wegovy",
"mounjaro",
"zepbound",
"saxenda",
"trulicity",
"rybelsus",
"undecided"
],
"type": "string"
},
{
"type": "string"
}
],
"description": "Brand name, any case. Generic names map to the weight-management brand: semaglutide to Wegovy, tirzepatide to Zepbound, liraglutide to Saxenda, dulaglutide to Trulicity, oral semaglutide to Rybelsus."
}
}
}Per 100 g nutrition for the foods foodose uses, each with a realistic serving size and a GLP-1 tolerance rating describing how well it tends to sit when appetite is low. Free to use with attribution.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | Matches the food name, category or tags. |
| tolerance | string | How well the food tends to sit on a GLP-1. |
| minProteinPer100g | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"description": "Matches the food name, category or tags."
},
"tolerance": {
"enum": [
"easy",
"moderate",
"careful"
],
"type": "string",
"description": "How well the food tends to sit on a GLP-1."
},
"minProteinPer100g": {
"type": "number"
}
}
}Published GLP-1 recipes with per serving calories and protein, every ingredient traceable to a USDA FoodData Central record. Useful when someone asks what to actually eat, rather than what their targets are. The Foodose iPhone app plans whole days from a dish library of its own, around the user's dose week.
| Argument | Type | Description |
|---|---|---|
| diet | string | |
| meal | string | |
| limit | integer | |
| query | string | Matches title, cuisine, main ingredient and ingredient names. |
| maxTotalMinutes | number | |
| minProteinPerServing | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"diet": {
"enum": [
"vegetarian",
"vegan"
],
"type": "string"
},
"meal": {
"enum": [
"breakfast",
"lunch",
"dinner"
],
"type": "string"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 25,
"minimum": 1
},
"query": {
"type": "string",
"description": "Matches title, cuisine, main ingredient and ingredient names."
},
"maxTotalMinutes": {
"type": "number"
},
"minProteinPerServing": {
"type": "number"
}
}
}