log_body_metrics
UNIT INPUTS: never convert units yourself. For each canonical field below, pass the user's number exactly as stated when it is already in the canonical unit; when they gave the alternate unit instead, pass the same number unconverted and set the matching companion field so the tool converts once before storage. Omit the companion when the number is already canonical. This overrides any wording that asks you to do the arithmetic.
_lb fields: lb, or kg with input_weight_unit set.
_mi fields: mi, or km with input_distance_unit set.
_in fields: in, or cm with input_length_unit set.
_stated_g fields: g, or oz with input_mass_unit set.
_stated_ml fields: ml, or fl_oz with input_volume_unit set.
Log or update body composition metrics for a given date. Use when the user shares weight, body fat percentage, or any other body composition reading — whether typed manually, copy-pasted from a smart scale app, or described from a photo of a scale display.
PROACTIVE DATA COLLECTION: If the user hasn't shared their data yet, ask them to copy-paste the output from their scale app or upload a photo of the display — this lets you parse all fields at once instead of asking one by one.
INFER — do not ask:
date: default to today; infer from context ("this morning", "yesterday")
derived fields (lean_mass_lb, fat_mass_lb): calculate from weight and body fat % if possible — lean = weight × (1 - bf%/100), fat = weight × bf%/100
The *_pct fields are percentages 0-100. The *_in fields are manual tape measurements, not bioimpedance scale readings.
BMI is not a field here. It is derived automatically at read time from the user's canonical height and their resolved weight for the day -- never ask the user for BMI, and never try to log it.
Every field except date is optional; log any subset. One row per day. Calling this tool twice on the same date updates the existing entry (upsert).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date of the measurement. Format: YYYY-MM-DD. Default to today. | |
| notes | No | Any context worth noting (e.g. "post-workout", "morning fasted"). | |
| hips_in | No | Hip circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| chest_in | No | Chest circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| waist_in | No | Waist circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| calf_l_in | No | Left calf circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| calf_r_in | No | Right calf circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| weight_lb | No | Body weight in pounds, between 50 and 700. Convert from kilograms if the user spoke in kg (kg x 2.2046). In lb, or kg with input_weight_unit set. See UNIT INPUTS. | |
| bicep_l_in | No | Left bicep circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| bicep_r_in | No | Right bicep circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| thigh_l_in | No | Left thigh circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| thigh_r_in | No | Right thigh circumference. In in, or cm with input_length_unit set. See UNIT INPUTS. | |
| fat_mass_lb | No | Fat mass. Calculate from weight and body fat % if not explicitly stated. In lb, or kg with input_weight_unit set. See UNIT INPUTS. | |
| protein_pct | No | Protein percentage (0-100). | |
| body_fat_pct | No | Body fat percentage (0-100). | |
| bone_mass_lb | No | Bone mass. In lb, or kg with input_weight_unit set. See UNIT INPUTS. | |
| lean_mass_lb | No | Lean (non-fat) mass. Calculate from weight and body fat % if not explicitly stated. In lb, or kg with input_weight_unit set. See UNIT INPUTS. | |
| hydration_pct | No | Body water/hydration percentage. | |
| muscle_mass_lb | No | Skeletal muscle mass. Skeletal muscle tissue specifically, NOT lean_mass_lb, which is total non-fat mass including water, organs and bone. In lb, or kg with input_weight_unit set. See UNIT INPUTS. | |
| input_length_unit | No | Set to cm when the user gave cm for the _in fields in this object. Omit when they are already in. | |
| input_weight_unit | No | Set to kg when the user gave kg for the _lb fields in this object. Omit when they are already lb. | |
| skeletal_muscle_pct | No | Skeletal muscle percentage (0-100). | |
| visceral_fat_rating | No | Visceral fat rating (scale varies by device, typically 1-59). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes | Human-readable result text returned by the tool. |