MALAI
Server Details
GLP-1 nutrition companion: your food log, protein targets, next meals, plus USDA food facts.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 11 tools
Each tool targets a distinct resource+action, and the descriptions actively disambiguate the risky pairs (calculate_daily_targets vs get_nutrition_targets vs calculate_protein_target; get_food_log vs get_today_nutrition) with explicit 'Don't use for' pointers. An agent can reliably pick the right tool for a given user request.
Every tool uses the same malai_ prefix followed by a snake_case verb_noun pattern (get_body_profile, log_food, search_foods, suggest_next_meal). The verb set (get/calculate/log/search/suggest) is consistent and predictable.
11 tools sit comfortably in the well-scoped range, and each maps to a concrete user need (read profile, read targets, log, search, suggest, med guide, two calculators). Nothing feels padded or redundant.
The read/calculate/log/suggest lifecycle for daily nutrition is covered end to end, but the write side is thin: no tool to edit or delete a logged entry, and the body profile and saved recipes are read-only. These are workable gaps (users can fix entries in the app) but they are real dead ends for an agent.
Available Tools
11 toolsmalai_calculate_daily_targetsCalorie and macro targetsARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | Age in years. Adults only (18+). | |
| sex | Yes | Sex used by the calorie formula. | |
| goal | No | Weight goal. Default lose. | |
| height | Yes | Height, in height_unit. Feet and inches must be converted to inches (5 ft 6 in = 66). | |
| weight | Yes | Current body weight, in weight_unit. | |
| activity | No | 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 | Yes | Unit of height. | |
| weight_unit | Yes | Unit of weight and of rate_per_week. | |
| rate_per_week | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bmr | Yes | |
| note | Yes | |
| tdee | Yes | |
| fat_g | Yes | |
| notes | Yes | |
| source | Yes | |
| carbs_g | Yes | |
| fiber_g | Yes | |
| calories | Yes | |
| protein_g | Yes | |
| goal_delta_kcal | Yes | |
| rate_per_week_kg | Yes | |
| safety_adjustments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, it discloses meaningful calculation behavior: a calorie floor, a cap on the rate of loss, adult-only applicability, and parity with the MALAI app's calculator. It does not provide the numeric safety thresholds or formula, but the schema also explains that loss is capped and the applied rate is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the purpose, outputs, principal inputs, and safety behavior. The remaining sentences efficiently add app parity, concrete use cases, an eligibility restriction, and sibling routing without digression.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter calculator, the definition combines clear scope, example requests, safety constraints, and an explicit alternative with a fully described input schema and an output schema. Together with the safety annotations, this gives an agent enough context to select and invoke it correctly without requiring formula or return-value details in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents units, defaults, enum meanings, height conversion, and rate capping in detail. The description usefully summarizes the major inputs and illustrates a weekly-loss request, but adds little parameter-level information beyond that comprehensive schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: estimating daily calories, protein, carbs, fat, and fiber from stated physiological and goal inputs. It also distinguishes calculated targets from a signed-in user's saved targets in malai_get_nutrition_targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Concrete example requests show when to use it, while the adults-only restriction establishes eligibility. The explicit exclusion for saved targets, including the correct sibling tool, provides clear when-not and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_calculate_protein_targetProtein targetARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| weight | Yes | Current body weight. | |
| weight_unit | Yes | Unit of weight. | |
| meals_per_day | No | Meals to spread protein across. Default 4. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| basis | Yes | |
| notes | Yes | |
| source | Yes | |
| weight_kg | Yes | |
| per_meal_g | Yes | |
| meals_per_day | Yes | |
| daily_protein_g | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's job is added context, and it delivers: the formula's source ('2025 joint advisory'), the range derivation from body weight, and that results are split into per-meal amounts matching MALAI's calculator. It stops short of noting the GLP-1 framing's limits or rounding behavior, but the methodology disclosure is well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the verb, formula, and output shape in a single dense sentence, followed by example triggers and one exclusion clause. Every element earns its place; nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and the annotations fully carry the safety profile. The remaining gaps for a two-required-param calculator – method, scope, unit handling implied by the 210 lb example, and sibling routing – are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents weight, weight_unit, and meals_per_day with enum and bounds. The description reinforces that weight drives the g/kg computation and that meals_per_day spreads intake per meal, but adds no syntax, default value, or edge-case meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Calculate a daily protein range') and states the exact method (1.2–1.6 g/kg, 2025 joint advisory, split per meal). It explicitly names the sibling it is not (malai_get_nutrition_targets), so an agent can separate it from the other nutrition tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies concrete trigger utterances ('how much protein should I eat on Zepbound', 'I weigh 210 lb, what's my protein target') and an explicit exclusion routing signed-in saved targets to malai_get_nutrition_targets. Both the when and the when-not are stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_get_body_profileBody profileARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| body | No | |
| goal | No | |
| note | Yes | |
| activity | No | |
| demographics | No | |
| isPlaceholder | Yes | True if the user never filled in their profile. |
| macroOverrides | No | |
| unitsPreference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, closed-world read, so the bar is lower, and the description still adds behavior that structured fields cannot carry: the isPlaceholder flag signals the profile was never filled in, and it prescribes telling the user and pointing them at the app instead of quoting numbers. That is a genuine data-quality trap disclosed up front.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose before the usage trigger and the placeholder caveat. Every sentence carries distinct information, and the repeated 'MALAI:' branding prefix is the only negligible padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the input schema is empty, so the description needn't explain return shape or parameters. What an agent actually needs - what the tool is for, when to call it, and how to handle the unfilled-profile edge case - is all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description adds no parameter-level detail, but none is needed - it correctly spends its words on the return semantics instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the user's body profile in MALAI') and enumerates exactly what comes back: age, sex, height, weight, activity level, goal, units. That field list distinguishes it cleanly from siblings like malai_get_nutrition_targets or malai_get_food_log, which return different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use before advice that depends on their body or goal.' That is real when-to-use guidance tied to downstream intent. It stops short of naming an alternative tool or a when-not-to-call condition, but for a zero-param read of a distinct resource, the routing signal is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_get_food_logFood logARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | Last day, YYYY-MM-DD, inclusive. Defaults to today. | |
| startDate | No | First day, YYYY-MM-DD, in the user's time zone. Defaults to 6 days before today. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| count | Yes | |
| entries | Yes | |
| summary | Yes | Totals across the returned entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive and closed-world, so the bar is lower; the description still adds useful behavior by stating the default range ('last 7 days') and summarizing what arrives per entry (entryId, meal, nutrition, plus a total). No rate limits or edge cases (e.g., empty ranges, cross-timezone boundaries) are mentioned, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads identity and scope differentiation, the second packs returns, defaults and example queries with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief return summary is a bonus rather than a requirement, and the parameter documentation is complete. For a two-optional-param read tool this is nearly everything an agent needs, with only edge-case behavior (empty history, very long ranges) left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both date parameters are already documented with format, inclusivity and defaults, so the schema carries the semantics. The description only restates the default window at a high level and adds nothing about date-range limits or time-zone handling beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read what the user actually logged in MALAI across a date range') and explicitly contrasts the scope with planning ('their real history, not a plan'), which separates it from the calculate_* and target-oriented siblings. An agent can tell this is a historical retrieval tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three concrete user-phrase triggers ('what did I eat yesterday', 'what did I have this week', 'how has my protein been lately') plus the default window, so the when-to-use case is clear. It stops short of naming a specific alternative such as malai_get_today_nutrition, leaving the today-vs-range boundary to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_get_medication_guideGLP-1 medication guideARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | No | Default: overview, doses, side_effects, nutrition. | |
| medication | Yes | Brand name. Semaglutide is Ozempic/Wegovy; tirzepatide is Mounjaro/Zepbound. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| faqs | No | |
| name | Yes | |
| note | Yes | |
| doses | No | |
| phases | No | |
| source | Yes | |
| generic | Yes | |
| overview | No | |
| nutrition | No | |
| drug_class | Yes | |
| first_week | No | |
| fda_approval | No | |
| manufacturer | Yes | |
| side_effects | No | |
| administration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: it cites prescribing information as the source and enforces a clinical boundary against dose-change advice. It does not restate return shape, which is acceptable given an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by content coverage and then the safety exclusion in the position of highest emphasis. The content list is dense but each element maps to a real section in the schema, so nothing is filler; only minor trimming would be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return values, and both parameters are fully documented in the schema. For a read-only guide lookup, nothing an agent needs in order to select and call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by spelling out what the section content actually contains (dose steps, side effects with trial frequencies, food tips), which gives meaning to the sections enum beyond bare labels. It also names the accepted brand values in prose, reinforcing the enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get MALAI's guide to a GLP-1 medication') and names the four supported brands, then enumerates the concrete content delivered: dose steps, side effects with trial frequencies, food tips, phases, first week, FAQs. This is clearly distinguishable from the sibling tools, which are all nutrition logging/calculation utilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit positive triggers as quoted user phrasings ('what are Mounjaro side effects', 'what should I eat in my first week on Wegovy') and an explicit exclusion: 'Never use it to recommend a dose change, skipping or stopping', with the redirect to the prescriber. Both when-to-use and when-not-to-use are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_get_nutrition_targetsNutrition targetsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| bmr | No | |
| note | Yes | |
| tdee | No | |
| fatGrams | No | |
| carbGrams | No | |
| fiberGrams | No | |
| hasTargets | Yes | False when targets were never calculated; the other numbers are then absent. |
| proteinGrams | No | |
| goalDeltaKcal | No | |
| isPlaceholder | Yes | |
| safetyAdjusted | No | |
| targetCalories | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, so the bar is lower. The description still adds real value by disclosing provenance ('MALAI calculates these from the user's profile and GLP-1 needs') and an instruction to trust the returned values verbatim. It does not say what happens if the profile is incomplete or targets are unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the resource and its fields, then the provenance note, then the trigger conditions. Minor redundancy from repeating 'MALAI' three times, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return shape needn't be explained, and with no inputs there is nothing else to cover. The description supplies purpose, provenance, and triggers, which is sufficient for a simple read tool; only the failure/empty-profile case is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool applies. The description correctly spends no words on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the user's daily nutrition targets') and enumerates exactly what comes back: calories, protein, carbs, fat, fiber, BMR, TDEE. The phrase 'use them exactly as given rather than calculating your own' implicitly separates it from the sibling calculate tools (malai_calculate_daily_targets, malai_calculate_protein_target).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions: the user asks about their goals, their protein target, or whether an amount is enough. It also steers away from recomputing targets. The gap is that it never names the alternative tools outright, so the agent must infer that the malai_calculate_* siblings are the path when targets must be derived rather than fetched.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_get_saved_recipesSaved recipes and foodsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | Only items the user marked for this meal time. | |
| type | No | Only recipes or only foods. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| foods | Yes | |
| recipes | Yes | |
| countsBySlot | Yes | How many saved recipes are marked for each meal time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds context beyond that: the result set includes meal-time markings and per-serving nutrition, which tells the agent what shape of information it can reason over. Missing are notes on empty results or default behavior with no filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first establishes scope and returned content, the second supplies trigger phrases. Front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two optional filters, an output schema, and rich annotations, this is close to sufficient. The only real gap is the default no-filter behavior, which is minor given the fully described schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both enum parameters carry their own descriptions, so the schema does the heavy lifting. The description does not explain the slot or type filters or what happens when they are omitted, adding no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ("List the recipes and foods the user saved") and states what comes back (meal-time markings, per-serving nutrition). It implicitly separates itself from siblings like malai_search_foods or malai_get_food_log by scoping to saved items, though it never names an alternative directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete triggering phrasings ("what recipes do I have", "show my saved meals") and one downstream use case (suggesting something the user already likes). It stops short of explicit when-not conditions or naming a competing sibling tool to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_get_today_nutritionToday's nutritionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | Local date, YYYY-MM-DD. |
| note | Yes | |
| eaten | Yes | |
| entries | Yes | Number of food log entries today. |
| targets | Yes | Null when the user has no targets yet. |
| remaining | Yes | Target minus eaten; null without targets. |
| isPlaceholderProfile | Yes | True if the profile was never filled in; targets are then not personal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new context: these are the user's real logged numbers, they must not be estimated, and 'what is left' — particularly protein — is a first-class output. Minor gap: no mention of what happens for a day with zero entries, but the output schema covers the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core verb and scope, then trigger phrases, then the trust directive. The macro enumeration is dense but each item is a distinct returned field, so nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-parameter read with rich annotations and an output schema needs only purpose, triggers and trust caveats, all of which are present. An agent can decide to call this and interpret the result without further information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and the description has no parameter semantics to explain. It correctly spends no words on inputs and instead frames the implicit 'today' scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: what the user has eaten today measured against their MALAI targets, enumerating the tracked macros (calories, protein, carbs, fat, fiber) plus remaining amounts and entry count. It implicitly separates itself from malai_get_food_log (aggregate vs entries) and malai_suggest_next_meal ('before suggesting what to eat') but never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger phrases ('how am I doing today', 'how much protein do I have left', 'am I on track') and a sequencing rule (call before suggesting what to eat). Also carries a 'do not estimate' directive steering the agent to read rather than guess. It stops short of stating when NOT to use it or which sibling to prefer for raw entry listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_log_foodLog foodAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| meal | No | Meal time, if the user said it. | |
| text | Yes | What the user ate, in their words, e.g. "2 boiled eggs". | |
| unit | No | Unit for amount. Defaults to serving. | |
| amount | No | How much: number of servings, or grams/ml when unit is g/ml. Defaults to 1 serving. | |
| itemId | No | Exact item from an earlier MALAI result (options or logWith). Requires itemType. | |
| itemType | No | Type of itemId. | |
| requestId | No | 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 | No | When they ate it, ISO 8601. Defaults to now. | |
| recommendationId | No | Pass through from malai_suggest_next_meal logWith, if logging a suggestion. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| entry | No | The logged entry, when logged is true. |
| query | No | |
| today | No | |
| logged | Yes | True when an entry was written. False means choose an option and call again. |
| message | No | |
| options | No | Matches to confirm with the user; pass the chosen itemId and itemType back. |
| instruction | No | |
| needsChoice | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by explaining the two-phase behavior (lookup returns matching foods and saved recipes, then a second call commits the log), what is returned (the logged item, today's updated protein, an entryId), and the retry-safety contract via requestId. The requestId guidance complements rather than contradicts idempotentHint=false, since idempotency is caller-supplied rather than intrinsic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then the when-to-use trigger, then the workflow in numbered steps, then return/idempotency notes. Despite being longer than most descriptions, every sentence carries operational information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with an output schema and annotations, the description supplies the missing pieces: the multi-call workflow, how to disambiguate a match, the retry contract, and what identifiers come back. Nothing an agent needs to invoke it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains the relationship between text (step 1) and itemId/itemType (step 2), and why requestId must be reused on retries. It adds little about meal, amount/unit, or consumedAt beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (log food/drink into the MALAI food log) and gives concrete input examples ("2 boiled eggs", "a protein shake"). It is clearly distinguishable from siblings like malai_get_food_log (reading) and malai_search_foods (searching) without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ("Use whenever the user says they ate, drank, or want to log something") and a detailed two-step protocol: text-only lookup first, then confirm with the user and call again with itemId/itemType/amount. It does not name the adjacent sibling tools (malai_search_foods, malai_get_saved_recipes) as alternatives or state when to prefer them over this tool, so the routing is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_search_foodsFood nutrition lookupARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results, 1–10. Default 5. | |
| query | Yes | Food name, e.g. "cottage cheese 2%". |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| query | Yes | |
| source | Yes | |
| message | No | Present when nothing matched. |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes beyond them with two genuinely useful traits: the dataset is US-foods-only USDA data, and a null means unknown rather than zero. It does not mention result caps or what happens when a food is not found, leaving the remaining behavioral surface to the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tool's identity and scope, then the nutrient list, then triggers, then the exclusion — a sensible order with no filler. It is dense, packing four clauses into the first sentence, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema and full annotations, the description covers what to query, what comes back, the data source and its US scope, and null semantics. An agent can call it correctly without inspecting anything else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both params (query, limit) are fully documented there and the baseline is 3. The description notes the per-serving vs per-100 g basis and the protein-calorie share, but those are output semantics rather than added meaning for the inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("look up nutrition for a food") plus the backing source (USDA FoodData Central, US foods) and the exact nutrient set returned. It is unmistakably distinct from the logging and calculation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three concrete trigger phrasings ("how much protein is in cottage cheese", "compare tofu and chicken", "is a turkey sandwich high in protein") and one explicit exclusion ("Don't use to log food"). The exclusion, however, routes to malai_how_to_connect rather than naming malai_log_food, which is the actual sibling an agent would otherwise reach for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
malai_suggest_next_mealNext meal ideasARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| meal | Yes | Meal slot the ideas are for. |
| note | Yes | |
| suggestions | Yes | |
| recommendationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real context beyond them: the recommendation sources, the protein-gap/time-of-day selection logic, the cap of 3 options, and that protein and calories are returned. It does not discuss ranking criteria or what happens when no gap exists, so it is not fully exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing distinct work: what it returns and from what, when to reach for it, and how to act on the result. The chaining instruction to malai_log_food is placed last where an agent will look for next steps, and no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description only needs to signal the shape (up to 3 options with protein and calories), which it does. Combined with the handoff instruction and trigger phrases, an agent has everything needed to select and call this parameterless tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. It correctly implies all context (user, time of day, protein gap) is derived server-side rather than passed in, which is the useful signal here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb and resource ("Get personalised ideas for the user's next meal or snack") and scopes the source of those ideas (saved recipes plus GLP-1-friendly recipes) and the optimization target (close today's protein gap at this time of day). This clearly distinguishes it from sibling reads like malai_get_saved_recipes (raw list) and malai_search_foods (direct lookup).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete trigger utterances ("what should I eat", "what's for dinner", "I'm hungry", "something light with protein") and an explicit follow-up route to malai_log_food via the logWith field. It lacks an explicit exclusion such as "do not use when the user already named a specific food – use malai_search_foods instead", which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
- First observed
malai_calculate_daily_targets - First observed
malai_calculate_protein_target - First observed
malai_get_body_profile - First observed
malai_get_food_log - First observed
malai_get_medication_guide - First observed
malai_get_nutrition_targets - First observed
malai_get_saved_recipes - First observed
malai_get_today_nutrition - First observed
malai_log_food - First observed
malai_search_foods - First observed
malai_suggest_next_meal
Related MCP Connectors
Free GLP-1 nutrition facts: USDA food lookup, protein and calorie targets, medication guides.
51GLP-1 calorie and protein targets with a dose aware appetite ceiling, plus food and recipe search.
Calorie, workout and body-weight log inside ChatGPT and Claude. Log meals by text, photo or voice.
Persistent food journal for AI assistants. Log meals, save recipes, plan meals and track nutrition.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables tracking food intake and nutrition using the USDA FoodData Central database. Supports logging meals, setting daily nutrition goals, viewing food diaries, and analyzing nutrition trends over time with local SQLite storage.2 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables nutrition tracking via AI, allowing users to read food logs with macros, goals, and profile, log meals by text or photo, and access diary, subscription, diabetes, and wearable/glucose data.MIT
- AlicenseAqualityDmaintenanceEnables natural language access to USDA's FoodData Central database with 1M+ foods, supporting search, nutrition facts, food comparison, and daily value calculations.8MIT
- AlicenseNot gradedqualityCmaintenanceEnables food and nutrition lookups from Open Food Facts and USDA FoodData Central, plus local meal logging, barcode and product searches, nutrient comparisons, allergen and additive data, and daily meal totals.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.