GLP-1 nutrition companion: your food log, protein targets, next meals, plus USDA food facts.
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.
MALAI: Estimate daily calories, protein, carbs, fat and fiber from sex, age, height, weight, activity and goal, with MALAI's safety limits (a calorie floor and a cap on the rate of loss). Same calculator the MALAI app uses. Use for "how many calories should I eat on Wegovy", "what macros to lose 1 lb a week". Adults only. Don't use for a signed-in user's saved targets (that is malai_get_nutrition_targets).
Age in years. Adults only (18+).
Sex used by the calorie formula.
Height, in height_unit. Feet and inches must be converted to inches (5 ft 6 in = 66).
Current body weight, in weight_unit.
Unit of height.
Unit of weight and of rate_per_week.
Weight goal. Default lose.
Daily activity: sedentary (desk, little exercise), light (1–3 workouts a week), moderate (3–5), very_active (6–7), athlete (training twice a day). Default light.
Desired change per week, in weight_unit. Ignored for maintain. Default 0.5 kg (1.1 lb). Loss is capped for safety; the applied rate is returned as rate_per_week_kg.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http malai https://mcp.itsmalai.com/mcp
MALAI: Estimate daily calories, protein, carbs, fat and fiber from sex, age, height, weight, activity and goal, with MALAI's safety limits (a calorie floor and a cap on the rate of loss). Same calculator the MALAI app uses. Use for "how many calories should I eat on Wegovy", "what macros to lose 1 lb a week". Adults only. Don't use for a signed-in user's saved targets (that is malai_get_nutrition_targets).
| Argument | Type | Description |
|---|---|---|
| age* | integer | Age in years. Adults only (18+). |
| sex* | string | Sex used by the calorie formula. |
| goal | string | Weight goal. Default lose. |
| height* | number | Height, in height_unit. Feet and inches must be converted to inches (5 ft 6 in = 66). |
| weight* | number | Current body weight, in weight_unit. |
| activity | string | Daily activity: sedentary (desk, little exercise), light (1–3 workouts a week), moderate (3–5), very_active (6–7), athlete (training twice a day). Default light. |
| height_unit* | string | Unit of height. |
| weight_unit* | string | Unit of weight and of rate_per_week. |
| rate_per_week | number | Desired change per week, in weight_unit. Ignored for maintain. Default 0.5 kg (1.1 lb). Loss is capped for safety; the applied rate is returned as rate_per_week_kg. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sex",
"age",
"height",
"height_unit",
"weight",
"weight_unit"
],
"properties": {
"age": {
"type": "integer",
"maximum": 100,
"minimum": 18,
"description": "Age in years. Adults only (18+)."
},
"sex": {
"enum": [
"female",
"male"
],
"type": "string",
"description": "Sex used by the calorie formula."
},
"goal": {
"enum": [
"lose",
"maintain",
"gain"
],
"type": "string",
"description": "Weight goal. Default lose."
},
"height": {
"type": "number",
"description": "Height, in height_unit. Feet and inches must be converted to inches (5 ft 6 in = 66).",
"exclusiveMinimum": 0
},
"weight": {
"type": "number",
"maximum": 700,
"description": "Current body weight, in weight_unit.",
"exclusiveMinimum": 0
},
"activity": {
"enum": [
"sedentary",
"light",
"moderate",
"very_active",
"athlete"
],
"type": "string",
"description": "Daily activity: sedentary (desk, little exercise), light (1–3 workouts a week), moderate (3–5), very_active (6–7), athlete (training twice a day). Default light."
},
"height_unit": {
"enum": [
"cm",
"in"
],
"type": "string",
"description": "Unit of height."
},
"weight_unit": {
"enum": [
"kg",
"lb"
],
"type": "string",
"description": "Unit of weight and of rate_per_week."
},
"rate_per_week": {
"type": "number",
"maximum": 5,
"description": "Desired change per week, in weight_unit. Ignored for maintain. Default 0.5 kg (1.1 lb). Loss is capped for safety; the applied rate is returned as rate_per_week_kg.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}MALAI: Calculate a daily protein range for someone on a GLP-1 medication from their body weight: 1.2–1.6 g per kg, the 2025 joint advisory range for weight loss, split into per-meal amounts. Same method as MALAI's protein calculator. Use for "how much protein should I eat on Zepbound", "I weigh 210 lb, what's my protein target". Don't use for a signed-in user's saved MALAI target (that is malai_get_nutrition_targets).
| Argument | Type | Description |
|---|---|---|
| weight* | number | Current body weight. |
| weight_unit* | string | Unit of weight. |
| meals_per_day | integer | Meals to spread protein across. Default 4. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"weight",
"weight_unit"
],
"properties": {
"weight": {
"type": "number",
"maximum": 700,
"description": "Current body weight.",
"exclusiveMinimum": 0
},
"weight_unit": {
"enum": [
"kg",
"lb"
],
"type": "string",
"description": "Unit of weight."
},
"meals_per_day": {
"type": "integer",
"maximum": 6,
"minimum": 2,
"description": "Meals to spread protein across. Default 4."
}
},
"additionalProperties": false
}MALAI: Read the user's body profile in MALAI: age, sex, height, weight, activity level, goal and units. Use before advice that depends on their body or goal. If isPlaceholder is true the profile was never filled in; tell the user and suggest completing it in the MALAI app rather than quoting numbers based on it.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}MALAI: Read what the user actually logged in MALAI across a date range: their real history, not a plan. Use for "what did I eat yesterday", "what did I have this week", "how has my protein been lately". Defaults to the last 7 days. Returns each entry with its entryId, meal and nutrition, and a total.
| Argument | Type | Description |
|---|---|---|
| endDate | string | Last day, YYYY-MM-DD, inclusive. Defaults to today. |
| startDate | string | First day, YYYY-MM-DD, in the user's time zone. Defaults to 6 days before today. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day, YYYY-MM-DD, inclusive. Defaults to today."
},
"startDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day, YYYY-MM-DD, in the user's time zone. Defaults to 6 days before today."
}
},
"additionalProperties": false
}MALAI: Get MALAI's guide to a GLP-1 medication (Ozempic, Wegovy, Mounjaro or Zepbound): dose steps, common side effects with trial frequencies and food tips, what to eat, treatment phases, the first week, and FAQs, citing prescribing information. Use for "what are Mounjaro side effects", "what should I eat in my first week on Wegovy". Never use it to recommend a dose change, skipping or stopping; tell the user to ask their prescriber.
| Argument | Type | Description |
|---|---|---|
| sections | array | Default: overview, doses, side_effects, nutrition. |
| medication* | string | Brand name. Semaglutide is Ozempic/Wegovy; tirzepatide is Mounjaro/Zepbound. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"medication"
],
"properties": {
"sections": {
"type": "array",
"items": {
"enum": [
"overview",
"doses",
"side_effects",
"nutrition",
"phases",
"first_week",
"faqs"
],
"type": "string"
},
"minItems": 1,
"description": "Default: overview, doses, side_effects, nutrition."
},
"medication": {
"enum": [
"ozempic",
"wegovy",
"mounjaro",
"zepbound"
],
"type": "string",
"description": "Brand name. Semaglutide is Ozempic/Wegovy; tirzepatide is Mounjaro/Zepbound."
}
},
"additionalProperties": false
}MALAI: Read the user's daily nutrition targets from MALAI: calories, protein, carbs, fat, fiber, plus BMR and TDEE. MALAI calculates these from the user's profile and GLP-1 needs; use them exactly as given rather than calculating your own. Use when the user asks about their goals, their protein target, or whether an amount is enough.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}MALAI: List the recipes and foods the user saved in MALAI, with the meal times each is marked for and per-serving nutrition. Use for "what recipes do I have", "show my saved meals", or to suggest something the user already likes.
| Argument | Type | Description |
|---|---|---|
| slot | string | Only items the user marked for this meal time. |
| type | string | Only recipes or only foods. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slot": {
"enum": [
"breakfast",
"lunch",
"dinner",
"snack"
],
"type": "string",
"description": "Only items the user marked for this meal time."
},
"type": {
"enum": [
"recipe",
"food"
],
"type": "string",
"description": "Only recipes or only foods."
}
},
"additionalProperties": false
}MALAI: Get what the user has eaten today against their MALAI targets: calories, protein, carbs, fat and fiber eaten vs target, what is left (especially protein), and how many entries are logged. Use for "how am I doing today", "how much protein do I have left", "am I on track", or before suggesting what to eat. These are the user's real logged numbers; do not estimate them.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}MALAI: Log food or drink the user says they ate into their MALAI food log, from their own words, e.g. "2 boiled eggs", "a protein shake", "half my chicken rice bowl". Use whenever the user says they ate, drank, or want to log something. Step 1: call with text only; MALAI returns matching options from its food database and the user's saved recipes. Step 2: confirm the right option with the user (or pick the clear best match), then call again with itemId, itemType and amount/unit. Returns what was logged and today's updated protein. Pass requestId on step 2 so a retry never logs twice. The returned entryId identifies the entry.
| Argument | Type | Description |
|---|---|---|
| meal | string | Meal time, if the user said it. |
| text* | string | What the user ate, in their words, e.g. "2 boiled eggs". |
| unit | string | Unit for amount. Defaults to serving. |
| amount | number | How much: number of servings, or grams/ml when unit is g/ml. Defaults to 1 serving. |
| itemId | string | Exact item from an earlier MALAI result (options or logWith). Requires itemType. |
| itemType | string | Type of itemId. |
| requestId | string | A unique id you create for this log (e.g. a UUID). Send the same id when retrying so the food is never logged twice. |
MALAI: Look up nutrition for a food in MALAI's database (USDA FoodData Central, US foods): calories, protein, carbs, fat, fiber, saturated fat and sugar per serving (or per 100 g), plus the share of calories from protein. Use for "how much protein is in cottage cheese", "compare tofu and chicken", "is a turkey sandwich high in protein". A null value means unknown, not zero. Don't use to log food (that needs a MALAI account: malai_how_to_connect).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum results, 1–10. Default 5. |
| query* | string | Food name, e.g. "cottage cheese 2%". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Maximum results, 1–10. Default 5."
},
"query": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"description": "Food name, e.g. \"cottage cheese 2%\"."
}
},
"additionalProperties": false
}MALAI: Get personalised ideas for the user's next meal or snack, chosen by MALAI from their saved recipes and MALAI's GLP-1-friendly recipes to close today's protein gap at this time of day. Use for "what should I eat", "what's for dinner", "I'm hungry", "something light with protein". Returns up to 3 options with protein and calories. To log one, call malai_log_food with the values in its logWith field.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 4, 2026.
| consumedAt |
| string |
| When they ate it, ISO 8601. Defaults to now. |
| recommendationId | string | Pass through from malai_suggest_next_meal logWith, if logging a suggestion. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"text"
],
"properties": {
"meal": {
"enum": [
"breakfast",
"lunch",
"dinner",
"snack"
],
"type": "string",
"description": "Meal time, if the user said it."
},
"text": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "What the user ate, in their words, e.g. \"2 boiled eggs\"."
},
"unit": {
"enum": [
"serving",
"g",
"ml"
],
"type": "string",
"description": "Unit for amount. Defaults to serving."
},
"amount": {
"type": "number",
"maximum": 5000,
"description": "How much: number of servings, or grams/ml when unit is g/ml. Defaults to 1 serving.",
"exclusiveMinimum": 0
},
"itemId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Exact item from an earlier MALAI result (options or logWith). Requires itemType."
},
"itemType": {
"enum": [
"food",
"recipe"
],
"type": "string",
"description": "Type of itemId."
},
"requestId": {
"type": "string",
"maxLength": 100,
"minLength": 8,
"description": "A unique id you create for this log (e.g. a UUID). Send the same id when retrying so the food is never logged twice."
},
"consumedAt": {
"type": "string",
"format": "date-time",
"description": "When they ate it, ISO 8601. Defaults to now."
},
"recommendationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Pass through from malai_suggest_next_meal logWith, if logging a suggestion."
}
},
"additionalProperties": false
}