GymLog for AI assistants
New here? How to use GymLog with your AI assistant, with setup steps for each assistant.
GymLog's MCP server lets an AI assistant you choose (for example Claude, ChatGPT or Grok) read your GymLog training log after you sign in and approve it, and, if you allow it, write plans back (templates, Up next sessions with target weights, exercise settings), log, edit and remove workouts, and import past workouts it already holds. Add it as a custom connector with the address https://getgymlog.web.app/mcp. No GymLog account yet? You can create one on the sign-in page; the app is optional.
It never sees your notes, gyms or locations, photos, friends, or anyone you log for. Weights come in the unit you logged them in. Changes an assistant makes show its name in the app, and you can undo them for 30 days in GymLog: Settings › Connected apps. Free accounts can log or import workouts dated today and the 30 days before; older history needs GymLog Pro, which is sold in the GymLog app. Limits: 60 calls an hour (20 of them changes) and 600 a day per assistant; imports have their own limit (2 new imports a day, 3,000 workouts each). This is a training log, not medical advice.
Setting up a new account from an assistant
An assistant can also create a GymLog account for you. Connect it to https://getgymlog.web.app/mcp?signup=1 with no sign-in: it sees every GymLog tool from the start, but only the three below work until your account is verified (the others answer "sign up and verify your email first" and do nothing). It asks you for the same things the GymLog app asks at sign-up (your email, the name others see, a unique @handle, kg or lb, and whether you agree to "By continuing, you confirm you're 18 or older and agree to our Terms of Service and Privacy Policy."), and creates the account only after your yes. GymLog then emails you a verification link: tapping it is the only thing you do. From then on every tool works in that same chat, with no reconnecting, and the assistant appears in GymLog: Settings › Connected apps, where you can remove it any time. If nobody taps the link within 3 days, GymLog deletes the account. Limits: 10 new accounts a day per network, 3 attempts a day per email address. Once connected, an assistant can also ask GymLog to email you a link to delete your account (request_account_deletion); nothing is deleted until you open that link and tap Delete account.
get_started no sign-in
How to set up GymLog
Explains how to create a GymLog account for the user from here: what to ask them, the two tools to call, the one thing the user does (tap a link in an email), the limits, and what to do if they already have an account. Read only.
No arguments.
create_account no sign-in
Create a GymLog account
Creates a GymLog account for the user and emails them a verification link. BEFORE calling, ask the user, and never assume or fill these in yourself: (1) the email address to use, (2) the name other people will see, (3) the unique @handle they want (3 to 20 letters, numbers or _), (4) kg or lb, and (5) whether they agree to GymLog's sign-up line "By continuing, you confirm you're 18 or older and agree to our Terms of Service and Privacy Policy." (give them the links from get_started). Pass acceptedTerms: true ONLY if the user explicitly said yes. If the handle is taken you get handle_taken with free suggestions: let the user choose, then call again. If the email already has an account you get account_exists: help them connect with sign-in instead. Returns a signupId and a one-time claimSecret: keep the secret to yourself, then tell the user to tap the link in the email and call check_account_status.
email(required): The user's own email addressdisplayName(required): The name other people seehandle(required): The user's chosen unique @handle: 3 to 20 letters, numbers or _units(required): The unit the user logs weights inacceptedTerms(required): true ONLY if the user explicitly agreed to the sign-up line (18 or older, Terms of Service, Privacy Policy)
check_account_status no sign-in
Check a new account
After create_account: pending until the user taps the link in the verification email, then active and, exactly once, an access key; this connection is then signed in and every GymLog tool listed here works in it, with no reconnecting or re-listing. Call at most every 30 seconds. expired after 24 hours. Keep the access key out of the chat unless the user needs it for a bot's settings.
signupId(required): signupId from create_accountclaimSecret(required): claimSecret from create_account (secret)
Permissions
training:read: See your workouts, exercise history, records, templates and plansplans:write: Create and change your templates and plans, and set targets for your next sessionsworkouts:write: Log workouts for you, and edit or remove your workouts
Tools
get_profile read only
Get the training profile · needs training:read
The user's GymLog basics: preferred units (kg or lb), whether they use the phone app, how many workouts are synced and their date range, when the phone last synced (lastSyncedAt), and how many templates and planned sessions they have. Call this first. Read only.
No arguments.
list_workouts read only
List workouts · needs training:read
Lists the user's workouts, newest first: date, title, duration, and per exercise the number of working sets and the top set (weight, unit, reps), plus how many personal records were set. Filter by date range; paged with nextCursor. Use get_workout for every set. Read only.
from: Earliest date, YYYY-MM-DD (inclusive)to: Latest date, YYYY-MM-DD (inclusive)limitcursor: nextCursor from the previous page
get_workout read only
Get one workout · needs training:read
One workout in full: date, start time, duration, and every exercise with its rep range, rest and superset group, and every set (type, weight, unit, reps, RPE, whether it was ticked done, whether it was a PR), plus cardio. Unticked sets are planned, not performed. Read only.
workoutId(required): The workoutId from list_workouts
get_exercise_history read only
Get one exercise's history · needs training:read
One exercise over time, newest session first: each session's performed sets, top set, best estimated 1RM (Epley: weight x (1 + reps/30)) and volume; the exercise's progression settings; the e1RM trend; and the app's own verdict on whether the lift has stalled (best not beaten in 3+ sessions and 3+ weeks this cycle) or plateaued (the year's best not beaten in 4+ months). Read only.
exercise(required): An exerciseKey from search_exercises (preferred) or the exercise's namesessionscursor: nextCursor from the previous pagedate: The user's today, YYYY-MM-DD (for the stall verdict). Default: today in UTC.
get_personal_records read only
Get personal records · needs training:read
Personal records per exercise: heaviest set, best estimated 1RM, most reps in a set and the biggest session volume, each with its date and unit. All exercises (most recently trained first, up to 100) or one. On assisted machines the logged number is help, not load, so the best is the least assistance. Read only.
exercise: An exerciseKey from search_exercises (preferred) or the exercise's name
get_training_summary read only
Get a training summary · needs training:read
Totals for the week (Monday to Sunday), month, quarter or year containing a date: workouts, working sets, volume per unit (never converted), sets per exercise and per muscle group, and the current streak of weeks with at least one workout. Read only.
period(required)date: Any day in the period, YYYY-MM-DD. Default: today in UTC.
list_templates read only
List workout templates · needs training:read
The user's workout templates (their workout days): name, when last run, and each exercise with its rest, rep range, weight increment, auto-progress and sets (type and reps; templates hold no weights). Template names are user content. Paged. Read only.
cursor: nextCursor from the previous page
list_programs read only
List built-in programs · needs training:read
GymLog's built-in program library (for example StrongLifts 5x5, 5/3/1 Boring But Big, GZCLP, Push/Pull/Legs and GymLog's starter plans) with credit links. Without programId: an overview. With programId: every day's exercises, sets, reps, rest and progression (weightIncrement is in kg). userTemplates lists the user's templates named after a program day (a name match, not a hard link). Read only.
programId
search_exercises read only
Search exercises · needs training:read
Finds exercises in GymLog's built-in library and the user's own custom exercises by name or alias: exerciseKey, name, aliases, main muscle groups, equipment type, whether it is custom, and when the user last did it. Use the exerciseKey in other tools instead of guessing names. Read only.
query(required)limit
get_exercise_guide read only
Get an exercise guide · needs training:read
How to perform an exercise, from the guide the GymLog app shows: step-by-step instructions, the muscles worked, the equipment type and demonstration photo URLs. Pass an exerciseKey from search_exercises or the exercise's exact name or alias. You may show the images to the user; whenever you show them, keep the credit line (credit.text, with its license link credit.url) next to them. Library data only, nothing of the user's. Read only.
exercise(required): An exerciseKey from search_exercises (preferred) or the exercise's name
list_equipment read only
List equipment · needs training:read
The user's own custom equipment (name, loading type, start weight, the weights or increments it offers) and the plate set of their home gym (plate weights, units and counts). Never gym names or locations. Read only.
No arguments.
list_planned_sessions read only
List planned sessions · needs training:read
The user's Up next queue: planned sessions with their date, title, target weights and reps per set, who planned them, the planner's note and their status (planned; done and skipped only with includeDone). Read only.
includeDone
get_todays_plan read only
Get today's plan · needs training:read
The brief the GymLog app shows at the top of a workout started from a template (its Today's plan card), word for word: a header (which workout, when it was last done) and one line per exercise with what the user did last time, what to do today (the app's own weight and rep advice, with the plates to load), warm-ups, and a Stalled / Plateau / New cycle flag. Pass templateId or plannedSessionId; with neither it describes the next Up next session. With neither and nothing in Up next it does not guess a workout: it answers reason "invalid" with `templates` (templateId, name, lastRun; most recently done first) so you can ask the user which one. `text` is the whole brief, ready to show. Weights are the numbers the app's weight field shows (in pounds; a lift logged in kg gets the recall only). The app's default weight rule and warm-up settings are used (settingsNote). Read only.
templateId: A templateId from list_templatesplannedSessionId: A plannedSessionId from list_planned_sessionsdate: The user's today, YYYY-MM-DD (for "8 days ago" and the stall check). Default: today in UTC.
create_template changes data
Create a workout template · needs plans:write
Creates a workout template (a workout day) in the user's GymLog app: a name and its exercises, each with sets (type and reps), and optionally rest, rep range, weight step, auto-progress and a superset number (exercises sharing a number alternate). Templates hold no weights: put target weights in plan_session. Use exerciseKey values from search_exercises. The template shows in the app as changed by you. Idempotent on clientRequestId. Writes data.
name(required): The template's name (user content)exercises(required)clientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
update_template changes data
Change a workout template · needs plans:write
Changes one of the user's templates: a new name, or a new exercise list (it REPLACES the whole list, so send every exercise the template should keep). Returns the template before and after. Tell the user what will change and get their OK first. The whole template is replaced: if the user edits it on their phone later, their version wins. Idempotent on clientRequestId. Writes data.
templateId(required): The templateId from list_templatesname: The template's name (user content)exercisesclientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
remove_template changes data
Remove a workout template · needs plans:write
Removes one of the user's templates from every device. Past workouts are not touched. Tell the user which template will go and get their OK first. The user can undo it for 30 days in GymLog (Settings > Connected apps). Already removed returns duplicate. Idempotent on clientRequestId. Deletes data.
templateId(required): The templateId from list_templatesclientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
update_exercise_settings changes data
Change an exercise's settings · needs plans:write
Changes how GymLog progresses one exercise: increment (the weight step, in the unit the user logs this exercise in), autoProgress (suggest the next weight from the rep range), warmup (style plate or percent, 1 to 5 sets, top set 65 to 95 percent of the working weight; null clears it back to the user's default) and weightDriver (last_session = progress from the last session, estimated_max = a share of the estimated max; null = the user's default). Send only what changes. Returns before and after. Idempotent on clientRequestId. Writes data.
exercise(required): An exerciseKey from search_exercises (preferred) or the exercise's nameincrementautoProgresswarmupweightDriverclientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
plan_session changes data
Plan a session (Up next) · needs plans:write
Puts a planned session in the user's Up next list in the GymLog app: a title, an optional date, and each exercise with its sets (type, target weight with its unit, target reps, optional RPE). When the user starts it, the app lays out those sets with your targets shown, labelled as your plan; finishing marks it done. Optionally based on a template (templateId; its exercises are used when you send none) and with a short note from you (coachNote, up to 280 characters, shown with your name). To change a planned session, send its plannedSessionId (this replaces it whole). At most 14 planned sessions wait at once. Weights without a unit use the user's units. Idempotent on clientRequestId. Writes data.
plannedSessionId: To replace an existing planned session (from list_planned_sessions)date: The day it is planned for, YYYY-MM-DD (optional)title(required)templateId: The template it follows (optional)exercisescoachNoteclientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
remove_planned_session changes data
Remove a planned session · needs plans:write
Takes one planned session out of the user's Up next list on every device. Workouts already logged are not touched. Already removed returns duplicate. Idempotent on clientRequestId. Deletes data.
plannedSessionId(required): The plannedSessionId from list_planned_sessionsclientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
log_workout changes data
Log a workout · needs workouts:write
Adds a finished workout to the user's GymLog log: the date, optionally the start time, duration and a title, and each exercise with its sets (type, weight with its unit, reps, optional RPE). The workout is private, never posted to friends, and shows in the app as logged by you. Pass plannedSessionId when the user did a session from their Up next list (it is then marked done), or templateId when they followed a template. Use exerciseKey values from search_exercises. Free accounts can log workouts dated today and the 30 days before; older dates need GymLog Pro (pro_required). Weights without a unit use the user's units. Returns the workout and any personal records it set. Idempotent on clientRequestId. Writes data.
date(required): The day it was done, YYYY-MM-DD (the user's day)startTime: Start time, HH:MM (24 h, the user's clock)durationMintitle: A short title, for example the template's nametemplateId: The template it followed (optional; its name is the default title)plannedSessionId: The Up next session it completes (optional)exercises(required)clientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
update_workout changes data
Change a workout · needs workouts:write
Changes one of the user's own workouts: the date, start time, duration or title, and/or the exercise list. exercises REPLACES the user's exercises in that workout: send every exercise to keep, each with entryId (from get_workout) to keep it, and each set with setId to keep it; an exercise or set without an id is added, and one you leave out is removed. Sets someone else logged in the same workout are never touched. Tell the user what will change and get their OK first. The whole workout is replaced: if the user edits it on their phone later, their version wins. Returns the workout before and after. Idempotent on clientRequestId. Writes data.
workoutId(required): The workoutId from list_workoutsdate: YYYY-MM-DDstartTime: Start time, HH:MM (24 h, the user's clock)durationMintitleexercisesclientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
remove_workout changes data
Remove a workout · needs workouts:write
Removes one of the user's workouts from every device. This deletes training history: tell the user exactly which workout (date and exercises) will go and get their clear OK first, every time. The user can undo it for 30 days in GymLog (Settings > Connected apps). A workout that also holds sets the user logged for someone else can only be removed in the app (not_editable). Already removed returns duplicate. Idempotent on clientRequestId. Deletes data.
workoutId(required): The workoutId from list_workoutsclientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
import_workouts changes data
Import past workouts · needs workouts:write
Moves a training history you already hold (for example workouts the user logged with you in chat) into GymLog, up to 50 workouts a call. DRY RUN BY DEFAULT: with dryRun true (the default) nothing is written and you get an importId and a summary to show the user first: how many would be added, duplicates skipped, the date range, which workouts need GymLog Pro, and exercise names GymLog doesn't know (with the closest matches). Fix names with exerciseMap ({"their name": exerciseKey, or "custom" to create the user's own exercise}). Then send the same batches with dryRun false and the same importId to add them. A workout already in GymLog (same date, exercises and sets) is skipped. Free accounts can import workouts dated today and the 30 days before; older ones come back skipped with pro_required. Imported workouts are private, marked as imported by you, never posted to friends, and the user can remove a whole import in one step (remove_import, or Settings > Connected apps in the app). Limits: 3,000 workouts an import, 2 new imports a day. Writes data when dryRun is false.
importId: From the dry run; required when dryRun is falsedryRunworkouts(required)exerciseMap: Their exercise name → an exerciseKey from search_exercises, or "custom"
remove_import changes data
Remove an import · needs workouts:write
Removes every workout of one import you made (import_workouts) from every device, in one step. Workouts the user changed since are kept. Tell the user how many workouts will go and get their clear OK first. Already removed returns duplicate. Idempotent on clientRequestId. Deletes data.
importId(required)clientRequestId(required): A unique id you make up for this change (8 to 64 letters, digits, - or _). Reuse it when retrying so the change happens once.
request_account_deletion changes data
Request account deletion · needs training:read
Starts deleting the user's whole GymLog account: GymLog emails the account's own address a link to a GymLog page that shows what will be deleted, with one Delete account button. THIS TOOL DELETES NOTHING; only the user can, from that email. Deleting is permanent: their account and profile, workouts, templates and plans, custom exercises, equipment and settings, every connected assistant (this connection too) and their sign-in in the app and on the website. Before calling, tell the user that and get their explicit OK. At most one link a minute, 3 a day.
No arguments.