MCP App Store
by KeenEthics

Overview

Gravl connects your Gravl workout tracking account to ChatGPT. Review your training history, personal records, exercise progress, weekly training summaries, strength scores, and body measurements. Build workout templates and custom splits from Gravl's exercise library, log completed workouts from a description, and update goals, equipment, units, rest times, and other training settings. Changes sync to the Gravl app. A Gravl account is required, and the app only acts on the signed-in user's own data.

Tools

copy_food_entries

ChatGPT
Copies entries to another day and time, with the same foods and amounts ("same breakfast as yesterday"). Read the source day with get_food_log to pick the entry ids. Returns the target day.

create_custom_exercise

ChatGPT
Creates a custom exercise in the user's library for a movement missing from the catalog (e.g. CrossFit movements). Only use it after resolve_exercises found no acceptable match. The exercise is immediately usable in workouts and templates and syncs to the user's app. Fill every field you can infer from the movement: muscles, equipment, movement type, category, and related catalog exercises (via resolve_exercises). An Instagram/TikTok video is downloaded and rehosted server-side, which can take up to two minutes.

create_custom_food

ChatGPT
Adds a packaged food the catalog lacks to the user's own foods, from its nutrition label. Search the catalog first. Returns the new food's id, to log it with log_food right away.

create_custom_split

ChatGPT
Creates a custom split with its explicit sessions. Set dryRun to check a large payload first: it returns the same errors and saves nothing.

create_workout

ChatGPT
Logs a completed workout. Only for workouts the user actually did: never use it to plan one (plans are workout templates). Gravl normalizes units and assisted/bodyweight loads, then calculates volume, estimated strength calories, progression, and personal records. Sensor metrics stay absent unless a device later enriches the workout. Resolve exercise ids first. Set dryRun to check a large payload first: it returns the same errors and logs nothing.

create_workout_template

ChatGPT
Creates a saved workout template: a named list of exercises with their planned sets. Get exercise ids from resolve_exercises. A split gets specific exercises this way: create one template per training day, then point a custom-split session at each template. Gravl assigns the template's externalId: use the one in the response. Set dryRun to check a large payload first: it returns the same errors and saves nothing.

delete_custom_split

ChatGPT
Permanently deletes a custom muscle split. Fails if it is the currently selected training mode. Irreversible: only call it after the user explicitly confirms the specific split.

delete_food_entry

ChatGPT
Permanently deletes one entry from the user's Gravl Macros food log. Only call it after the user confirmed which entry; take the entry id from get_food_log. Returns the updated day.

delete_memory

ChatGPT
Permanently deletes one memory entry. Use it when the user asks you to forget something, or when a saved fact is no longer true and there is nothing to replace it with. A request to forget is the user's confirmation: no extra confirmation needed. Take the id from get_memory (or the memory list you were given).

delete_workout

ChatGPT
Permanently deletes a logged workout and the personal records it set. Irreversible: only call it after the user explicitly confirms which workout to delete.

delete_workout_template

ChatGPT
Permanently deletes a saved workout template. Fails if a custom split still uses the template: remove it from the split first. Irreversible: only call it after the user explicitly confirms the specific template.

get_all_settings

ChatGPT
Fetches the account (name, username, subscription status), the body profile (gender, height, body weight), and all editable settings groups in one response: user, workout, warmup, rest time, appearance, and training mode. Read it before you edit settings or diagnose a problem. Custom splits and gym profiles have their own list tools.

get_body_metrics

ChatGPT
Reads the user's weight and body measurements over a range of up to 92 days: weigh-ins, the smoothed trend weight the app judges progress on, the change over the range and per week, and girths and body fat. Weights are in kg and girths in cm; convert for an imperial user.

get_custom_split

ChatGPT
Fetches one custom muscle split by external id.

get_exercise

ChatGPT
Fetches one exercise's full detail by numeric id: description, muscles, equipment, movement, difficulty, importance, and whether it supports incline, steps, or added weight.

get_exercise_history

ChatGPT
Returns one exercise's recent sessions, newest first, with every logged set, top set, estimated 1RM, session volume, set count, weekly frequency, and rep PRs. Resolve the exercise id first.

get_food_log

ChatGPT
Reads the user's Gravl Macros food log for one day: each entry with its id, time, portion, calories and macros, the day's totals, its calorie and macro targets, and what is left. Use it to answer how much the user ate or has left, and to find an entry's id before deleting it.

get_mcp_options

ChatGPT
Returns readable id/name options for every enum field (goals, levels, Variety Level, muscles, weight units, workout types, set types, session types, ...). Call it once before sending numeric ids in a write tool.

get_memory

ChatGPT
Reads the user's memory file: short facts that Gravl assistants saved about the user in earlier conversations (preferences, goals, schedule, constraints), each with an id. Read it at the start of a conversation and before you save, update, or delete a memory. Live account data (settings, workouts, records) wins over a memory that disagrees with it.

get_nutrition_profile

ChatGPT
Reads the user's Gravl Macros setup: current and goal weight, unit system (metric or imperial), daily calorie and macro targets, and the active program's goal and weekly change. Read it before giving advice, and use its unitSystem when you talk about weight, measurements or water.

get_nutrition_summary

ChatGPT
Summarizes the user's eating over a range of up to 92 days: average calories and macros, days logged, days the calorie target was met, and each logged day's totals against its target. Use it for "how did my week go" questions; use get_food_log for one day's entries.

get_strength_scores

ChatGPT
Returns the user's weekly Gravl strength scores, newest week first, with total and per-muscle changes. Call it with no arguments for the current score: it needs no date range, so never ask the user for one. Add fromWeek/toWeek or limit for trends and comparisons. A null total means the overall score is not unlocked yet; use the muscle scores instead. Exercise-level records are omitted unless includeExercises is true or exerciseId is set.

get_system_splits

ChatGPT
Lists Gravl's built-in system training splits: externalId, name, description, supported days per week, and session names. Use it to name the selected system split, or to pick a systemMuscleSplitExternalId before select_training_mode.

get_training_summary

ChatGPT
Summarizes a training window: weekly workouts, working sets and volume, comparison with the preceding window, muscle balance, and the biggest exercise improvements and declines. Defaults to the last 12 weeks. Prefer it over fetching many full workouts.

get_water

ChatGPT
Reads how much water the user logged on one day, against their daily water target, and whether water can be logged for that day.

get_workout

ChatGPT
Fetches one workout with its exercise and set details. Get workoutExternalId from list_workouts. Ids from public share links (app.gravl.ai/quick-workout/public/...) are share-snapshot ids and do not resolve here.

get_workout_plan

ChatGPT
Reads the user's upcoming workouts, next one first: plan.revision (send it as expectedRevision on every plan write), aiCoachEnabled, lastPlannedDate, and each workout's externalId, scheduledDate, kind and exercises with sets. A set without a weight is calculated by the user's Gravl app. exerciseNames maps every exerciseId to its name; guided workouts include the session content.

get_workout_template

ChatGPT
Fetches one saved workout template by external id, with its exercises and sets.

list_custom_splits

ChatGPT
Lists the user's custom muscle splits and their sessions.

list_equipment

ChatGPT
Lists every Gravl equipment option with its id and name. Use it to translate the user's equipmentIds (get_all_settings) into names, or to pick an equipmentId filter for list_exercises.

list_exercises

ChatGPT
Browses Gravl's exercise library (catalog plus the user's custom exercises) by muscle, submuscle, equipment, type, or category. It is the only source of exercise recommendations: never recommend an exercise you have not seen in a result. To turn exercise names into ids, use resolve_exercises instead. There is no difficulty filter: each result carries a difficulty array, so filter for the user's level yourself. Send at least one filter and a small limit.

list_guided_sessions

ChatGPT
Lists Gravl's guided sessions (timed hybrid and conditioning sessions with sections, rounds and rests) that can go in the workout plan: splitName, sessionExternalId, name, estimatedMinutes and section names. Use a sessionExternalId as guidedSessionExternalId in upsert_planned_workout.

list_gym_profiles

ChatGPT
Lists the user's gym profiles and the equipment selected in each. Read it before you recommend exercises for a specific gym.

list_measurements

ChatGPT
Lists the user's body measurements (weight, body fat, girths), newest first, including those logged in Gravl Macros. Every row is in the user's unit: weightUnit kg means cm for girths, lb means inches. isExternal is true for readings that did not come from Gravl Workouts (Gravl Macros, health apps).

list_my_foods

ChatGPT
Lists the user's own Gravl Macros foods: saved, recent and custom foods with the serving they usually log, and their saved meals. Check it before search_foods when the user names something they eat often ("my usual protein shake"). Recipes are listed for reference only.

list_personal_records

ChatGPT
Lists the user's personal records (1RM, max weight, max volume, max reps, duration, distance), optionally for one exercise. Use it to ground weight suggestions in what the user actually lifts. Pass exerciseId when you care about one movement: the unfiltered list covers the whole history.

list_routines

ChatGPT
Lists the user's routines (meals they repeat on set weekdays at a set time) with their foods and totals, and for the given day whether each due routine is pending, logged or skipped.

list_workout_templates

ChatGPT
Lists the user's saved workout templates with external ids, names, descriptions, and exercise counts. A custom-split session with sessionType=1 points at a template's externalId.

list_workouts

ChatGPT
Lists completed workouts, latest first, with paging and filters: date range, a contained exercise, a trained muscle, workout type, or a name substring. Call it without filters for recent workouts. Includes workouts synced from other platforms (Apple Health, Strava, ...) unless filtered via source.

log_food

ChatGPT
Logs one food item, or one saved meal, to the user's Gravl Macros day. Prefer the user's own food from list_my_foods (foodId) or a catalog food from search_foods (source and externalId), with the portion the user said; use grams only when the user gave a weight, and quickAdd only when nothing matches. Log each item of a meal with its own call and its own idempotencyKey. Returns the updated day.

log_measurements

ChatGPT
Logs body measurements for a day: body fat percent and girths (neck, shoulder, chest, bicep, forearm, waist, abdomen, glutes, thigh, calf). Only the measurements sent change; the rest of that day stays.

log_routine

ChatGPT
Answers one of the user's routines for a day: log adds its foods to the day as they are saved, skip marks it as not eaten. Take the routine id from list_routines. Logging needs Gravl Macros Pro.

log_water

ChatGPT
Adds water the user drank to a day. Each call adds to the day's total. Returns the day's water.

log_weight

ChatGPT
Logs the user's weight for a day. One reading per day: logging again the same day replaces it, as in the app.

patch_user_settings

ChatGPT
Updates the user's training setup and preferences: goal, experience level, workout duration, workout place, weekly goal, gym name; weight/distance units, first day of week, exertion rating prompt, supersets, Variety Level, default effort; equipment ids, sub-equipment ids, bodyweight-only mode, plate calculator; focused and excluded muscles/submuscles. Partial update: send only the fields the user asked to change (at most 5). List fields are full replacements: read the current values first before you add or remove single items. Body-profile fields (weight, height, gender) cannot be changed by a tool; the user edits them in the Gravl app under Profile > Health Profile.

patch_workout_settings

ChatGPT
Updates how workouts are built. settings: workout generation (supersets, drop sets, warmup/stretching exercises, upcoming workouts, generation mode, set counts, rep ranges and rep types). warmup: warmup sets (enabled, sets for compound and isolated exercises). restTime: rest timer (enabled, rest between compound and isolated sets in seconds). Send only the sections and fields the user asked to change.

remove_planned_workout

ChatGPT
Removes one upcoming workout from the user's plan (not a logged workout). Only works while AI Coach is on. Fails when expectedRevision is stale: call get_workout_plan and retry.

replace_workout_template

ChatGPT
Full-replaces an existing workout template's name, description, and exercises with what you send, so the desired final state must be explicit. Read the template first with get_workout_template. It runs the same checks as create_workout_template.

resolve_exercises

ChatGPT
Resolves natural-language exercise names to Gravl exercise ids, with a confidence per match. Always call it before you build a workout or template from exercise names; never guess an exercise id. If a name has no acceptable match, say so and offer a close alternative from the matches, or create the movement with create_custom_exercise where available.

save_memory

ChatGPT
Saves one new fact about the user to their memory file, so every Gravl assistant knows it in later conversations. Save durable facts the user tells you that the account does not already store: training preferences and dislikes, goals and events, schedule, how they like answers. One fact per entry, written as a third-person sentence ("Prefers dumbbells to barbells for pressing."). Never save settings values (read them from the account instead), one-off requests, health or medical details, or credentials. If a saved fact changed, use update_memory instead of saving a second entry. Max 300 characters.

search_foods

ChatGPT
Searches the Gravl Macros food catalog, generic foods first, then brands. Returns each match's ref (to pass to log_food), its calories and macros per 100 g, and the portions it can be logged by (label and grams). Search one food at a time, by its plain name, in the language the user writes in.

select_training_mode

ChatGPT
Switches how the user's workouts are planned: recovered (Gravl picks muscles automatically), a system split, one of the user's custom splits, or aiCoach. system requires systemMuscleSplitExternalId (get_system_splits); custom requires customMuscleSplitExternalId (list_custom_splits). aiCoach turns on AI Coach: you own the user's workout plan and the Gravl app stops generating workouts, so ask the user to confirm first, then plan with upsert_planned_workout. Choosing any other mode turns AI Coach off and removes its plan. Does not select programs.

set_fasting_day

ChatGPT
Marks a day as a fast, or unmarks it, so the app leaves it out of the user's averages. A day with 200 kcal or more logged cannot be a fast. Marking a fast also clears that day's manual totals and its partly-logged flag.

set_goal_weight

ChatGPT
Changes the user's goal weight. It does not change their calorie or macro targets. Only call it when the user asks to change their goal.

update_custom_split

ChatGPT
Updates a custom split: its metadata (name, description, source), its sessions, or both. sessions full-replaces every session with the list you send, so read the split first and send the complete desired final state. Omit sessions to keep them.

update_food_entry

ChatGPT
Fixes an entry in the user's food log: its amount ("it was 2 eggs, not 3"), its day and time, or both. Take the entry id from get_food_log. Returns the updated day.

update_memory

ChatGPT
Replaces the text of one memory entry. Use it when a saved fact changed or to merge related entries into one. Take the id from get_memory (or the memory list you were given). Max 300 characters.

upsert_planned_workout

ChatGPT
Adds a workout to the user's plan, or replaces the planned workout with the same externalId. Only works while AI Coach is on (select_training_mode aiCoach, after the user agrees). A dated workout goes in date order; position 0 makes it the next workout. Omit set weights to let Gravl calculate them. Resolve exercise ids with resolve_exercises first. Fails when expectedRevision is stale: call get_workout_plan and retry. Returns the updated plan.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps