Muscla for Claude, ChatGPT and other AI assistants
Connect your Muscla account to your AI assistant and talk there about your workouts, sets, weights and food, with your real numbers, the same ones the app shows. If you allow it, the assistant can also log for you: meals, water, weigh-ins, a workout you forgot, a whole plan.
You need a Muscla account with sync turned on: the assistant sees what Muscla syncs with your account.
Connector URL
https://mcp.muscla.app/mcp
How to connect
- Claude (web, desktop, mobile): Settings → Connectors → Add custom connector. Name: Muscla, URL as above, then Add. Next to Muscla choose Connect, sign in with your email code or passkey and choose what Claude may see and enter.
- ChatGPT: once Muscla is in ChatGPT's app directory, add it there. Where ChatGPT lets you add your own connectors (developer mode), the URL works too.
- Other assistants (Gemini CLI, VS Code, Perplexity, Cursor and any MCP client): add the URL as a remote MCP server; it signs in with OAuth.
What the assistant may do
You choose per kind of data — training, bodyweight, food — whether the assistant may read it and whether it may also add, change and delete entries (only together with reading). Every entry an assistant adds or changes shows in the app with its name ("via Claude"). Each write tool tells the assistant to show you first what it will enter and to wait for your yes, and assistants such as Claude and ChatGPT ask your permission by default before they run a tool that writes. You can change or delete every entry in the app.
Disconnect
In the app: Profile → AI assistants → the assistant → Disconnect. It takes effect at once. There you can also change what each assistant may see and enter.
Try asking
- How has my bench press developed over the last three months?
- Review my last week of training against my plan.
- Did I eat enough protein this week?
- Log my lunch: 200 g chicken breast and 150 g rice.
- Build me a four-day plan from my recent workouts and put it in Muscla.
- Plan my meals for the next three days with 160 g protein a day and give me the shopping list.
- What does my weekly check say, and which vitamins am I short on?
Tools
| Tool | What it does | |
|---|---|---|
get_overview | Overview. Start here: the unit, today, what the user shared, and a summary of training (workouts, streak, week plan, strength score), bodyweight (latest, 30-day change, goal) and today's food against its targets. | Reads |
list_workouts | List workouts. Workouts, newest first: date, name, minutes, counted sets, volume, PRs and each exercise's top set. Filter by dates, an exercise (name or id) or a routine. Pass `next` as `cursor` for older ones. | Reads |
get_workout | Get a workout. One workout in full: every counted set (weight × reps, time, RIR/RPE; `wu` marks warm-ups, which never count), each exercise's estimated 1RM and whether it was a PR. | Reads |
get_exercise_history | Exercise history. One exercise over time: per workout the top set, estimated 1RM (Epley, up to 12 reps), volume and sets; the best values, sessions since the best, and the 12-week trend. Name (fuzzy) or id. | Reads |
get_progress | Training progress. Week by week (Monday first): workouts, counted sets per muscle group (push, pull, legs, core; hard sets too when the user logs effort), volume; the most trained exercises' e1RM change, the strength score and PRs. Default: the last 12 weeks. | Reads |
get_training_plan | Training plan. The user's routines (exercises with sets, reps, weight, rest in seconds), the weekly schedule and the next 14 days (`changed` marks a day moved or set to rest by hand). | Reads |
search_exercises | Search exercises. Muscla's exercise catalog and the user's own exercises: id, name, muscles, equipment, and `done` for ones the user has trained. Names are English; filter by muscle or equipment. | Reads |
get_body_metrics | Bodyweight. Weigh-ins with the 7-day average, the average change per week and the goal weight. Default: the last 90 days. | Reads |
get_nutrition | Nutrition. Days of food: totals against the day's targets (kcal, protein, carbs, fat, fiber, water; more on training days) and, with `entries`, what was eaten per meal for up to the last 7 days (`estimate` marks estimated values). Default: today; at most 31 days. | Reads |
search_foods | Search foods. Foods with values per 100 g or ml and portions: the user's own foods and favorites first, then Muscla's food database. The ids identify a food exactly. With `restaurant` (a chain such as "McDonald's"): that chain's dishes, the most popular first without a query; `restaurant: "list"` lists the chains. | Reads |
get_my_community | My community. The user's own Muscla community: their profile (name, city, country), how many follow them, whom they follow and open follow requests, what they share with whom (workouts, PRs, food), and their last 10 posts with likes and comments counted (workout posts when training is shared with this assistant, meal posts when food is), and their own places in the strength lists of their city and country (lifts in kg with training shared; the DOTS score with bodyweight shared too; verified ones too: by video, witnesses or a competition), and with training shared their groups with their place in each running challenge (workouts, training days, volume in kg or PRs). Only the user's own data: nothing about other people. | Reads |
get_micronutrients | Vitamins and minerals. Vitamins, minerals, fiber, sugar, saturated fat and salt of a day (or the 7 days up to it) against reference values for adults (EFSA; by the user's sex), per day. Only entries that know a value count: `coverage` is the share of the kcal the value comes from (below 1, the real amount is likely higher). Not medical advice. | Reads |
get_weekly_check | Weekly check. The app's weekly check of the nutrition goals: the weight trend of the last three weeks against the goal's band (% of bodyweight a week), the kcal eaten over two weeks, the maintenance that follows, and — only when the trend is off and the data suffice — a new rest-day kcal goal (at most 250 kcal away; after one is taken over, the next waits a week: `adjusted`). Days with planned food still open do not count until it is eaten or removed. Weigh-ins only when bodyweight is shared. Suggest a change only as the app does; set it with set_nutrition_goals after the user agrees. | Reads |
get_meal_plan | Meal plan. Planned food per day and meal (with ids for eat_planned_food and remove_planned_food), what each day adds up to planned and already eaten, against its targets. Planned food is not eaten until marked so. Default: today and the next 6 days; at most 31 days. | Reads |
get_shopping_list | Shopping list. What to buy for the planned days, as the app lists it: each food once with its amount added up, recipes as their ingredients, quick entries by name, ticked-off lines (`checked`) last, and the user's own items (`own`). Default: today and the next 6 days. | Reads |
log_food | Log food. Adds what was eaten to a meal of a day: foods by their id from search_foods with grams or a portion (exact values), or a name with kcal and macros (saved as an estimate). Default: today. | Writes |
update_food_entry | Change a food entry. Changes one diary entry (ids from get_nutrition with entries): the amount, meal or day; for a quick entry also its name and numbers. | Writes |
delete_food_entry | Delete food entries. Deletes diary entries by id (from get_nutrition with entries); all or none. | Writes |
log_water | Log water. Adds water to a day (add_ml) or sets the day's total (total_ml). Default: today. | Writes |
log_bodyweight | Log bodyweight. Logs a weigh-in in the profile's unit (see get_overview), one per day: a second one that day replaces the first. Default: today. | Writes |
set_nutrition_goals | Set nutrition goals. Changes the nutrition goals: mode (build, cut, keep), kcal on a rest day, extra kcal on training days, protein per kg of bodyweight, fat as % of kcal, water. Values not given stay. | Writes |
plan_food | Plan food. Plans food for a meal of a day (today up to 30 days ahead), items as in log_food. Planned food shows in the app's meal plan and shopping list and counts only once marked eaten (eat_planned_food or the app). | Writes |
eat_planned_food | Mark planned food as eaten. Moves planned entries (ids from get_meal_plan) into the diary as eaten, on their planned day and meal, under the same id. One already eaten is reported, not logged twice; a day still ahead cannot be eaten yet. | Writes |
remove_planned_food | Remove planned food. Removes planned entries by id (from get_meal_plan); all or none. Eaten food stays. | Writes |
add_to_shopping_list | Add to the shopping list. Adds the user's own items to the shopping list (beside what the meal plan needs): a name and, if wanted, an amount as text ("1 kg"). At most 30 at once. | Writes |
log_workout | Log a workout. Adds a past workout (today or earlier): exercises by id from search_exercises (or their exact name) with their sets, weights in the profile's unit. Default start 12:00; give the routine if it followed one. | Writes |
create_routine | Create a routine. Adds a routine to the plan: exercises by id from search_exercises with sets, reps (or a rep range), weight in the profile's unit, seconds or minutes, and rest. set_week_schedule puts it on days. | Writes |
update_routine | Change a routine. Renames a routine or replaces its exercises (the whole list; get_training_plan shows the current one), or changes its progression. | Writes |
set_week_schedule | Set the week. Replaces which routine is trained on which weekday; days left out are rest days. | Writes |
Privacy
What you share goes to your assistant's provider (for example Anthropic for Claude, OpenAI for ChatGPT). Muscla does not decide what they keep; their own privacy policies apply. Muscla stores which assistant you connected, what you allowed and when, and when it was last used. Access tokens are stored only as hashes. No ads, no selling of data. Muscla's numbers are self-tracked and not medical advice.
Limits
60 requests a minute and 2,000 a day per assistant; long ranges are answered in pages.