Public fitness and nutrition calculators, exercise information, and evidence-based guides.
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.
Warm-up sets at about 40, 55, 70 and 85% of a working weight, then the working weight, with plates per side (plates 25–1.25 kg).
Working weight in kg.
Bar weight: 20 or 15 kg.
Warm-up sets at about 40, 55, 70 and 85% of a working weight, then the working weight, with plates per side (plates 25–1.25 kg).
| Argument | Type | Description |
|---|---|---|
| bar_kg | any | Bar weight: 20 or 15 kg. |
| working_weight_kg* | number | Working weight in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"working_weight_kg"
],
"properties": {
"bar_kg": {
"anyOf": [
{
"type": "number",
"const": 20
},
{
"type": "number",
"const": 15
}
],
"default": 20,
"description": "Bar weight: 20 or 15 kg."
},
"working_weight_kg": {
"type": "number",
"maximum": 500,
"minimum": 20,
"description": "Working weight in kg."
}
},
"additionalProperties": false
}Maintenance calories plus the 10–15% lean-gain starting surplus and a weekly gain guide (the Bodywise bulking calorie calculator).
| Argument | Type | Description |
|---|---|---|
| age* | number | Age in years (18–90). |
| sex* | string | Sex assigned at birth. |
| activity* | number | Activity multiplier: 1.2, 1.375, 1.55, 1.725 or 1.9. |
| height_cm* | number | Height in cm. |
| weight_kg* | number | Bodyweight in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sex",
"age",
"height_cm",
"weight_kg",
"activity"
],
"properties": {
"age": {
"type": "number",
"maximum": 90,
"minimum": 18,
"description": "Age in years (18–90)."
},
"sex": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Sex assigned at birth."
},
"activity": {
"type": "number",
"maximum": 1.9,
"minimum": 1.2,
"description": "Activity multiplier: 1.2, 1.375, 1.55, 1.725 or 1.9."
},
"height_cm": {
"type": "number",
"maximum": 220,
"minimum": 120,
"description": "Height in cm."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 30,
"description": "Bodyweight in kg."
}
},
"additionalProperties": false
}Compares weekly weight change with a 0.25-0.5% of bodyweight a week monitoring range and suggests a calorie step. Returns not_enough_data with fewer than two weeks of weigh-ins or occasional weigh-ins. Never diagnoses a medical cause.
| Argument | Type | Description |
|---|---|---|
| weeks* | integer | Weeks of weigh-ins. |
| weigh_ins | string | How often they weigh in. |
| weight_kg* | number | Bodyweight now in kg. |
| current_kcal* | number | Current intake in kcal a day. |
| weight_change_kg* | number | Weight change over those weeks in kg, negative for a loss. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg",
"weeks",
"weight_change_kg",
"current_kcal"
],
"properties": {
"weeks": {
"type": "integer",
"maximum": 26,
"minimum": 1,
"description": "Weeks of weigh-ins."
},
"weigh_ins": {
"enum": [
"daily",
"weekly",
"occasional"
],
"type": "string",
"default": "weekly",
"description": "How often they weigh in."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 35,
"description": "Bodyweight now in kg."
},
"current_kcal": {
"type": "number",
"maximum": 6000,
"minimum": 1200,
"description": "Current intake in kcal a day."
},
"weight_change_kg": {
"type": "number",
"maximum": 20,
"minimum": -20,
"description": "Weight change over those weeks in kg, negative for a loss."
}
},
"additionalProperties": false
}Older calculator kept for backwards compatibility: maintenance (Mifflin-St Jeor × named activity level) times 0.80, 0.85, 1.00 or 1.10 by goal. It has no Bodywise page. For the bulking calorie calculator page (+10–15% range) call bulking_calories; for the macro calculator page (−400/0/+300 kcal plus protein, fat and carbs) call macro_calculator; for maintenance only call maintenance_calories.
| Argument | Type | Description |
|---|---|---|
| age* | number | Age in years (18–90). |
| sex* | string | Sex assigned at birth. |
| goal* | string | Goal: -20%, -15%, 0% or +10% of maintenance. |
| height_cm* | number | Height in cm. |
| weight_kg* | number | Bodyweight in kg. |
| activity_level* | string | Typical activity level. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"age",
"sex",
"height_cm",
"weight_kg",
"activity_level",
"goal"
],
"properties": {
"age": {
"type": "number",
"maximum": 90,
"minimum": 18,
"description": "Age in years (18–90)."
},
"sex": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Sex assigned at birth."
},
"goal": {
"enum": [
"fat_loss_aggressive",
"fat_loss_moderate",
"maintenance",
"lean_gain"
],
"type": "string",
"description": "Goal: -20%, -15%, 0% or +10% of maintenance."
},
"height_cm": {
"type": "number",
"maximum": 215,
"minimum": 140,
"description": "Height in cm."
},
"weight_kg": {
"type": "number",
"maximum": 180,
"minimum": 40,
"description": "Bodyweight in kg."
},
"activity_level": {
"enum": [
"sedentary",
"light",
"moderate",
"active",
"very_active"
],
"type": "string",
"description": "Typical activity level."
}
},
"additionalProperties": false
}Carbohydrate grams = (daily kcal − protein g × 4 − fat g × 9) ÷ 4, with an optional training-day / rest-day split that keeps the weekly average.
| Argument | Type | Description |
|---|---|---|
| fat_g* | number | Daily fat in g. |
| protein_g* | number | Daily protein in g. |
| daily_kcal* | number | Daily calories. |
| training_days | integer | Training days a week, for the split. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"daily_kcal",
"protein_g",
"fat_g"
],
"properties": {
"fat_g": {
"type": "number",
"maximum": 400,
"minimum": 0,
"description": "Daily fat in g."
},
"protein_g": {
"type": "number",
"maximum": 500,
"minimum": 0,
"description": "Daily protein in g."
},
"daily_kcal": {
"type": "number",
"maximum": 8000,
"minimum": 1000,
"description": "Daily calories."
},
"training_days": {
"type": "integer",
"maximum": 6,
"minimum": 1,
"description": "Training days a week, for the split."
}
},
"additionalProperties": false
}Creatine monohydrate maintenance (3–5 g/day) and optional loading dose (~0.3 g/kg/day for 5–7 days).
| Argument | Type | Description |
|---|---|---|
| weight_kg* | number | Bodyweight in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg"
],
"properties": {
"weight_kg": {
"type": "number",
"maximum": 180,
"minimum": 40,
"description": "Bodyweight in kg."
}
},
"additionalProperties": false
}Daily protein of 1.6–2.2 g per kg bodyweight and the per-meal split (the public Bodywise protein calculator page, /hub/protein-calculator). Prefer this over protein_calculator when matching the website.
| Argument | Type | Description |
|---|---|---|
| weight_kg* | number | Bodyweight in kg. |
| meals_per_day | integer | Meals per day (2–6, default 4). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg"
],
"properties": {
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 30,
"description": "Bodyweight in kg."
},
"meals_per_day": {
"type": "integer",
"default": 4,
"maximum": 6,
"minimum": 2,
"description": "Meals per day (2–6, default 4)."
}
},
"additionalProperties": false
}DOTS (IPF 2019) and original Wilks scores for a powerlifting total at a given bodyweight.
| Argument | Type | Description |
|---|---|---|
| sex* | string | Sex assigned at birth. |
| weight_kg* | number | Bodyweight in kg. |
| total_lifted_kg* | number | Squat + bench + deadlift total in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg",
"sex",
"total_lifted_kg"
],
"properties": {
"sex": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Sex assigned at birth."
},
"weight_kg": {
"type": "number",
"maximum": 210,
"minimum": 40,
"description": "Bodyweight in kg."
},
"total_lifted_kg": {
"type": "number",
"maximum": 1500,
"minimum": 20,
"description": "Squat + bench + deadlift total in kg."
}
},
"additionalProperties": false
}Double progression: from the reps completed in each working set today, returns the weight and rep target for the next session. Weight only goes up once every set reaches the top of the rep range.
| Argument | Type | Description |
|---|---|---|
| rep_max* | integer | Top of the rep range. |
| rep_min* | integer | Bottom of the rep range. |
| step_kg | number | Override the weight step in kg. |
| equipment | string | Used to pick the smallest realistic weight step. |
| weight_kg* | number | Weight used today in kg. |
| reps_achieved* | array | Reps completed in each working set, in order. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg",
"rep_min",
"rep_max",
"reps_achieved"
],
"properties": {
"rep_max": {
"type": "integer",
"maximum": 30,
"minimum": 1,
"description": "Top of the rep range."
},
"rep_min": {
"type": "integer",
"maximum": 30,
"minimum": 1,
"description": "Bottom of the rep range."
},
"step_kg": {
"type": "number",
"maximum": 25,
"minimum": 0.5,
"description": "Override the weight step in kg."
},
"equipment": {
"enum": [
"barbell",
"dumbbell",
"machine"
],
"type": "string",
"default": "barbell",
"description": "Used to pick the smallest realistic weight step."
},
"weight_kg": {
"type": "number",
"maximum": 500,
"minimum": 1,
"description": "Weight used today in kg."
},
"reps_achieved": {
"type": "array",
"items": {
"type": "integer",
"maximum": 60,
"minimum": 0
},
"maxItems": 8,
"minItems": 1,
"description": "Reps completed in each working set, in order."
}
},
"additionalProperties": false
}Converts dumbbell and barbell loads. The total is arithmetic for any lift. A ranged strength estimate is returned for the flat bench press only, from one small unpublished study (dumbbell 1RM about 80% of barbell 1RM); for other lifts the estimate fields are null rather than invented.
| Argument | Type | Description |
|---|---|---|
| lift* | string | Lift. |
| direction* | string | Which way to convert. |
| weight_kg* | number | Dumbbell weight per hand, or the loaded barbell including the bar. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"direction",
"lift",
"weight_kg"
],
"properties": {
"lift": {
"enum": [
"bench_press",
"incline_press",
"overhead_press",
"row"
],
"type": "string",
"description": "Lift."
},
"direction": {
"enum": [
"dumbbell_to_barbell",
"barbell_to_dumbbell"
],
"type": "string",
"description": "Which way to convert."
},
"weight_kg": {
"type": "number",
"maximum": 400,
"minimum": 1,
"description": "Dumbbell weight per hand, or the loaded barbell including the bar."
}
},
"additionalProperties": false
}Daily fat: 0.8 g per kg bodyweight by default (allowed 0.5–1.2 g/kg). Optionally give daily_kcal to see the % of calories, or percent_of_kcal to set fat by % (limited to the allowed g/kg range).
| Argument | Type | Description |
|---|---|---|
| g_per_kg | number | Fat g/kg (default 0.8). |
| weight_kg* | number | Bodyweight in kg. |
| daily_kcal | number | Daily calories. |
| percent_of_kcal | number | Fat as % of calories (needs daily_kcal). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg"
],
"properties": {
"g_per_kg": {
"type": "number",
"maximum": 1.2,
"minimum": 0.5,
"description": "Fat g/kg (default 0.8)."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 30,
"description": "Bodyweight in kg."
},
"daily_kcal": {
"type": "number",
"maximum": 8000,
"minimum": 1000,
"description": "Daily calories."
},
"percent_of_kcal": {
"type": "number",
"maximum": 99,
"minimum": 1,
"description": "Fat as % of calories (needs daily_kcal)."
}
},
"additionalProperties": false
}Calculate fat-free mass, FFMI and height-normalised FFMI (Kouri et al., 1995).
| Argument | Type | Description |
|---|---|---|
| height_cm* | number | Height in cm. |
| weight_kg* | number | Bodyweight in kg. |
| body_fat_percent* | number | Body fat percentage. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"height_cm",
"weight_kg",
"body_fat_percent"
],
"properties": {
"height_cm": {
"type": "number",
"maximum": 215,
"minimum": 140,
"description": "Height in cm."
},
"weight_kg": {
"type": "number",
"maximum": 180,
"minimum": 40,
"description": "Bodyweight in kg."
},
"body_fat_percent": {
"type": "number",
"maximum": 50,
"minimum": 3,
"description": "Body fat percentage."
}
},
"additionalProperties": false
}Projected weeks and daily deficit to reach a target body-fat percentage, assuming all loss is fat (~7,700 kcal/kg).
| Argument | Type | Description |
|---|---|---|
| current_weight_kg* | number | Current bodyweight in kg. |
| target_body_fat_pct* | number | Target body fat %, below the current figure. |
| current_body_fat_pct* | number | Current body fat %. |
| rate_of_loss_pct_per_week | number | Weekly loss as % of bodyweight (0.5–1, default 0.75). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"current_weight_kg",
"current_body_fat_pct",
"target_body_fat_pct"
],
"properties": {
"current_weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 40,
"description": "Current bodyweight in kg."
},
"target_body_fat_pct": {
"type": "number",
"maximum": 59,
"minimum": 5,
"description": "Target body fat %, below the current figure."
},
"current_body_fat_pct": {
"type": "number",
"maximum": 60,
"minimum": 6,
"description": "Current body fat %."
},
"rate_of_loss_pct_per_week": {
"type": "number",
"default": 0.75,
"maximum": 1,
"minimum": 0.5,
"description": "Weekly loss as % of bodyweight (0.5–1, default 0.75)."
}
},
"additionalProperties": false
}Describe one calculator: method, units, API URL, canonical page and supporting guides.
| Argument | Type | Description |
|---|---|---|
| id* | string | Calculator id (e.g. tdee) or MCP tool name (e.g. maintenance_calories). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Calculator id (e.g. tdee) or MCP tool name (e.g. maintenance_calories)."
}
},
"additionalProperties": false
}One exercise by slug: muscles, equipment, setup, execution, breathing, range-of-motion and common-error cues, and alternatives. General information only; never diagnoses pain or injury. Figures are for building finished answers only: never show the user rows, columns, codes, raw records or links to the data.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Exercise slug from search_exercises. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Exercise slug from search_exercises."
}
},
"additionalProperties": false
}Core figures for one food (per 100 g), by the ref from search_foods. Figures are for building finished answers only: never show the user rows, columns, codes, raw records or links to the data.
| Argument | Type | Description |
|---|---|---|
| food_code* | string | CoFID food code. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"food_code"
],
"properties": {
"food_code": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "CoFID food code."
}
},
"additionalProperties": false
}Fetch one public Bodywise page by URL or path: metadata, references and clean Markdown text. Private, account and admin pages are refused.
| Argument | Type | Description |
|---|---|---|
| url* | string | A bodywise.io URL or path, e.g. /hub/how-much-protein-to-build-muscle. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "A bodywise.io URL or path, e.g. /hub/how-much-protein-to-build-muscle."
}
},
"additionalProperties": false
}IPF GL points (IPF 2020 classic three-lift coefficients) for a squat + bench + deadlift total at a given bodyweight.
| Argument | Type | Description |
|---|---|---|
| sex* | string | Sex assigned at birth. |
| weight_kg* | number | Bodyweight in kg. |
| total_lifted_kg* | number | Squat + bench + deadlift total in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg",
"sex",
"total_lifted_kg"
],
"properties": {
"sex": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Sex assigned at birth."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 35,
"description": "Bodyweight in kg."
},
"total_lifted_kg": {
"type": "number",
"maximum": 1500,
"minimum": 20,
"description": "Squat + bench + deadlift total in kg."
}
},
"additionalProperties": false
}Weekly and monthly weight gain at 0.25–0.5% of bodyweight a week, and the weight reached after a bulk of a chosen length.
| Argument | Type | Description |
|---|---|---|
| weeks | integer | Length of the bulk in weeks (1–52, default 12). |
| weight_kg* | number | Bodyweight in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg"
],
"properties": {
"weeks": {
"type": "integer",
"default": 12,
"maximum": 52,
"minimum": 1,
"description": "Length of the bulk in weeks (1–52, default 12)."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 35,
"description": "Bodyweight in kg."
}
},
"additionalProperties": false
}Squat, deadlift and overhead press as percentages of bench press. Descriptive only.
| Argument | Type | Description |
|---|---|---|
| squat_kg | number | Squat in kg. |
| deadlift_kg | number | Deadlift in kg. |
| bench_press_kg* | number | Bench press in kg. |
| overhead_press_kg | number | Overhead press in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bench_press_kg"
],
"properties": {
"squat_kg": {
"type": "number",
"maximum": 500,
"minimum": 10,
"description": "Squat in kg."
},
"deadlift_kg": {
"type": "number",
"maximum": 500,
"minimum": 10,
"description": "Deadlift in kg."
},
"bench_press_kg": {
"type": "number",
"maximum": 400,
"minimum": 10,
"description": "Bench press in kg."
},
"overhead_press_kg": {
"type": "number",
"maximum": 300,
"minimum": 5,
"description": "Overhead press in kg."
}
},
"additionalProperties": false
}List every public Bodywise calculator with its MCP tool name, JSON API URL and canonical page.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}List every public, indexable Bodywise page (Hub guides, programmes, calculators and site pages) with canonical URLs.
| Argument | Type | Description |
|---|---|---|
| section | string | Filter: all, hub (Muscle & Strength Hub) or site. |
| content_type | string | Optional content type, e.g. guide, programme, tool, quick-answer, page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"section": {
"enum": [
"all",
"hub",
"site"
],
"type": "string",
"default": "all",
"description": "Filter: all, hub (Muscle & Strength Hub) or site."
},
"content_type": {
"type": "string",
"maxLength": 40,
"description": "Optional content type, e.g. guide, programme, tool, quick-answer, page."
}
},
"additionalProperties": false
}The public Bodywise macro calculator page (/macro-calculator): maintenance calories (Mifflin-St Jeor × activity multiplier), a goal target (build +300 kcal, maintain 0, lean −400; never below 1,200 kcal) and daily protein, fat and carb grams. No email is needed or accepted.
| Argument | Type | Description |
|---|---|---|
| age* | number | Age in years (18–90). |
| sex* | string | Sex assigned at birth. |
| goal* | string | build (build muscle), maintain (stay the same weight) or lean (lose fat, keep muscle). |
| activity* | number | Activity multiplier: 1.2, 1.375, 1.55, 1.725 or 1.9. |
| height_cm* | number | Height in cm. |
| weight_kg* | number | Bodyweight in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sex",
"age",
"height_cm",
"weight_kg",
"activity",
"goal"
],
"properties": {
"age": {
"type": "number",
"maximum": 90,
"minimum": 18,
"description": "Age in years (18–90)."
},
"sex": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Sex assigned at birth."
},
"goal": {
"enum": [
"build",
"maintain",
"lean"
],
"type": "string",
"description": "build (build muscle), maintain (stay the same weight) or lean (lose fat, keep muscle)."
},
"activity": {
"type": "number",
"maximum": 1.9,
"minimum": 1.2,
"description": "Activity multiplier: 1.2, 1.375, 1.55, 1.725 or 1.9."
},
"height_cm": {
"type": "number",
"maximum": 220,
"minimum": 120,
"description": "Height in cm."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 30,
"description": "Bodyweight in kg."
}
},
"additionalProperties": false
}Use this first when asked for a meal plan. Returns daily calories, protein (1.9 g/kg default), fat (0.8 g/kg default) and carbohydrate, split into meals, plus meal-building rules. Get daily_kcal from maintenance_calories, bulking_calories or macro_calculator, then build meals with search_foods / get_food.
| Argument | Type | Description |
|---|---|---|
| weight_kg* | number | Bodyweight in kg. |
| daily_kcal* | number | Daily calories. |
| fat_g_per_kg | number | Fat g/kg (default 0.8). |
| meals_per_day | integer | Meals per day. |
| protein_g_per_kg | number | Protein g/kg (default 1.9). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"daily_kcal",
"weight_kg"
],
"properties": {
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 30,
"description": "Bodyweight in kg."
},
"daily_kcal": {
"type": "number",
"maximum": 8000,
"minimum": 1000,
"description": "Daily calories."
},
"fat_g_per_kg": {
"type": "number",
"maximum": 1.2,
"minimum": 0.5,
"description": "Fat g/kg (default 0.8)."
},
"meals_per_day": {
"type": "integer",
"default": 4,
"maximum": 6,
"minimum": 2,
"description": "Meals per day."
},
"protein_g_per_kg": {
"type": "number",
"maximum": 2.2,
"minimum": 1.6,
"description": "Protein g/kg (default 1.9)."
}
},
"additionalProperties": false
}Estimate daily maintenance calories (Mifflin-St Jeor × activity multiplier) for an adult.
| Argument | Type | Description |
|---|---|---|
| age* | number | Age in years (18–90). |
| sex* | string | Sex assigned at birth. |
| activity* | number | Activity multiplier: 1.2, 1.375, 1.55, 1.725 or 1.9. |
| height_cm* | number | Height in cm. |
| weight_kg* | number | Bodyweight in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"sex",
"age",
"height_cm",
"weight_kg",
"activity"
],
"properties": {
"age": {
"type": "number",
"maximum": 90,
"minimum": 18,
"description": "Age in years (18–90)."
},
"sex": {
"enum": [
"male",
"female"
],
"type": "string",
"description": "Sex assigned at birth."
},
"activity": {
"type": "number",
"maximum": 1.9,
"minimum": 1.2,
"description": "Activity multiplier: 1.2, 1.375, 1.55, 1.725 or 1.9."
},
"height_cm": {
"type": "number",
"maximum": 215,
"minimum": 140,
"description": "Height in cm."
},
"weight_kg": {
"type": "number",
"maximum": 180,
"minimum": 40,
"description": "Bodyweight in kg."
}
},
"additionalProperties": false
}Estimate a 1RM (Epley, counting reps in reserve) and working weights from a completed set.
| Argument | Type | Description |
|---|---|---|
| rir* | integer | Reps in reserve (0–4). |
| reps* | integer | Repetitions completed. |
| weight_kg* | number | Weight lifted in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg",
"reps",
"rir"
],
"properties": {
"rir": {
"type": "integer",
"maximum": 4,
"minimum": 0,
"description": "Reps in reserve (0–4)."
},
"reps": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Repetitions completed."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 5,
"description": "Weight lifted in kg."
}
},
"additionalProperties": false
}Older goal-based daily protein range (fat_loss, hypertrophy, maintenance, endurance; optional lean mass), kept for backwards compatibility. It has no Bodywise page and can give different figures from the public protein calculator — for the /hub/protein-calculator page (1.6–2.2 g/kg) call daily_protein_range instead.
| Argument | Type | Description |
|---|---|---|
| goal | string | Goal: fat_loss, hypertrophy, maintenance or endurance. |
| weight_kg* | number | Bodyweight in kg. |
| lean_mass_kg | number | Optional fat-free mass in kg; used for hypertrophy and fat_loss. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg"
],
"properties": {
"goal": {
"enum": [
"fat_loss",
"hypertrophy",
"maintenance",
"endurance"
],
"type": "string",
"default": "hypertrophy",
"description": "Goal: fat_loss, hypertrophy, maintenance or endurance."
},
"weight_kg": {
"type": "number",
"maximum": 180,
"minimum": 40,
"description": "Bodyweight in kg."
},
"lean_mass_kg": {
"type": "number",
"maximum": 180,
"minimum": 20,
"description": "Optional fat-free mass in kg; used for hypertrophy and fat_loss."
}
},
"additionalProperties": false
}Split a daily protein target across meals and compare each meal with 0.4 g per kg of bodyweight.
| Argument | Type | Description |
|---|---|---|
| weight_kg* | number | Bodyweight in kg. |
| meals_per_day | integer | Meals per day (3–6, default 4). |
| daily_protein_target_g* | number | Daily protein target in grams. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg",
"daily_protein_target_g"
],
"properties": {
"weight_kg": {
"type": "number",
"maximum": 180,
"minimum": 40,
"description": "Bodyweight in kg."
},
"meals_per_day": {
"type": "integer",
"default": 4,
"maximum": 6,
"minimum": 3,
"description": "Meals per day (3–6, default 4)."
},
"daily_protein_target_g": {
"type": "number",
"maximum": 400,
"minimum": 20,
"description": "Daily protein target in grams."
}
},
"additionalProperties": false
}A rest window in seconds for an exercise type and goal, with the evidence caveats. Not a proven optimum.
| Argument | Type | Description |
|---|---|---|
| goal | string | Training goal. |
| exercise_type* | string | Exercise type. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"exercise_type"
],
"properties": {
"goal": {
"enum": [
"muscle",
"strength"
],
"type": "string",
"default": "muscle",
"description": "Training goal."
},
"exercise_type": {
"enum": [
"heavy_compound",
"other_compound",
"isolation"
],
"type": "string",
"description": "Exercise type."
}
},
"additionalProperties": false
}Working weight for a target number of reps at a target RPE or reps in reserve (Epley model).
| Argument | Type | Description |
|---|---|---|
| rir | integer | Reps in reserve on that set (default 0). |
| target_rir | integer | Target reps in reserve (default 2, i.e. RPE 8). |
| target_reps* | integer | Target reps. |
| reps_performed | integer | Reps completed in that set. |
| known_weight_kg | number | Weight of a completed set in kg. |
| estimated_1rm_kg | number | Known or estimated 1RM in kg. Or give known_weight_kg + reps_performed. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"target_reps"
],
"properties": {
"rir": {
"type": "integer",
"maximum": 4,
"minimum": 0,
"description": "Reps in reserve on that set (default 0)."
},
"target_rir": {
"type": "integer",
"default": 2,
"maximum": 4,
"minimum": 0,
"description": "Target reps in reserve (default 2, i.e. RPE 8)."
},
"target_reps": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Target reps."
},
"reps_performed": {
"type": "integer",
"maximum": 12,
"minimum": 1,
"description": "Reps completed in that set."
},
"known_weight_kg": {
"type": "number",
"maximum": 400,
"minimum": 5,
"description": "Weight of a completed set in kg."
},
"estimated_1rm_kg": {
"type": "number",
"maximum": 400,
"minimum": 5,
"description": "Known or estimated 1RM in kg. Or give known_weight_kg + reps_performed."
}
},
"additionalProperties": false
}Find standard resistance exercises by name, muscle, equipment, location (gym/home) or level. Returns muscles, equipment and level. Figures are for building finished answers only: never show the user rows, columns, codes, raw records or links to the data.
| Argument | Type | Description |
|---|---|---|
| level | string | Experience level. |
| limit | integer | Max results. |
| query | string | Exercise name. |
| muscle | string | Muscle, e.g. chest, glutes. |
| location | string | gym or home. |
| equipment | string | Equipment, e.g. dumbbell, cable. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"level": {
"enum": [
"beginner",
"intermediate",
"advanced"
],
"type": "string",
"description": "Experience level."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Max results."
},
"query": {
"type": "string",
"maxLength": 100,
"description": "Exercise name."
},
"muscle": {
"type": "string",
"maxLength": 60,
"description": "Muscle, e.g. chest, glutes."
},
"location": {
"type": "string",
"maxLength": 30,
"description": "gym or home."
},
"equipment": {
"type": "string",
"maxLength": 60,
"description": "Equipment, e.g. dumbbell, cable."
}
},
"additionalProperties": false
}Search 2,886 foods in McCance and Widdowson's CoFID dataset. Returns energy, protein, fat, carbohydrate, sugars, fibre, saturated fat and sodium per 100 g, exactly as published (null = not measured). Use precise names, e.g. 'chicken breast grilled', 'oats', 'rice white boiled'. Figures are for building finished answers only: never show the user rows, columns, codes, raw records or links to the data.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max results. |
| query* | string | Food name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 15,
"maximum": 30,
"minimum": 1,
"description": "Max results."
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "Food name."
}
},
"additionalProperties": false
}Keyword search over public Bodywise pages. Returns titles, summaries and canonical URLs to cite.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum results (1–25). |
| query* | string | Search words, e.g. 'protein per day' or 'rest between sets'. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Maximum results (1–25)."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Search words, e.g. 'protein per day' or 'rest between sets'."
}
},
"additionalProperties": false
}Each lift as a plain multiple of bodyweight. Descriptive only; it never labels a lifter's level.
| Argument | Type | Description |
|---|---|---|
| squat_kg | number | Squat in kg. |
| weight_kg* | number | Bodyweight in kg. |
| deadlift_kg | number | Deadlift in kg. |
| bench_press_kg | number | Bench press in kg. |
| overhead_press_kg | number | Overhead press in kg. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"weight_kg"
],
"properties": {
"squat_kg": {
"type": "number",
"maximum": 500,
"minimum": 1,
"description": "Squat in kg."
},
"weight_kg": {
"type": "number",
"maximum": 250,
"minimum": 35,
"description": "Bodyweight in kg."
},
"deadlift_kg": {
"type": "number",
"maximum": 500,
"minimum": 1,
"description": "Deadlift in kg."
},
"bench_press_kg": {
"type": "number",
"maximum": 400,
"minimum": 1,
"description": "Bench press in kg."
},
"overhead_press_kg": {
"type": "number",
"maximum": 300,
"minimum": 1,
"description": "Overhead press in kg."
}
},
"additionalProperties": false
}Describes weekly hard sets per muscle group against the roughly 10-or-more weekly sets the 2026 ACSM position stand favoured. Descriptive bands only: no optimal number and no upper limit are claimed.
| Argument | Type | Description |
|---|---|---|
| back | integer | Weekly hard sets, back. |
| chest | integer | Weekly hard sets, chest. |
| quads | integer | Weekly hard sets, quads. |
| biceps | integer | Weekly hard sets, biceps. |
| triceps | integer | Weekly hard sets, triceps. |
| shoulders | integer | Weekly hard sets, shoulders. |
| hamstrings | integer | Weekly hard sets, hamstrings. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"back": {
"type": "integer",
"default": 0,
"maximum": 60,
"minimum": 0,
"description": "Weekly hard sets, back."
},
"chest": {
"type": "integer",
"default": 0,
"maximum": 60,
"minimum": 0,
"description": "Weekly hard sets, chest."
},
"quads": {
"type": "integer",
"default": 0,
"maximum": 60,
"minimum": 0,
"description": "Weekly hard sets, quads."
},
"biceps": {
"type": "integer",
"default": 0,
"maximum": 60,
"minimum": 0,
"description": "Weekly hard sets, biceps."
},
"triceps": {
"type": "integer",
"default": 0,
"maximum": 60,
"minimum": 0,
"description": "Weekly hard sets, triceps."
},
"shoulders": {
"type": "integer",
"default": 0,
"maximum": 60,
"minimum": 0,
"description": "Weekly hard sets, shoulders."
},
"hamstrings": {
"type": "integer",
"default": 0,
"maximum": 60,
"minimum": 0,
"description": "Weekly hard sets, hamstrings."
}
},
"additionalProperties": false
}