{"version":"1.0","protocolVersion":"2025-06-18","serverInfo":{"name":"me.phor/phorme-training","title":"Phorme Training","version":"1.11.0"},"description":"Coach-built training: find a coaching brain, program, race plan, gym class or sports clinic; preview workouts with demos; save training and read your log in the Phorme app.","websiteUrl":"https://phor.me/agents","documentationUrl":"https://github.com/nicksgoat/phorme-mcp","iconUrl":"https://phor.me/apple-touch-icon.png","transport":{"type":"streamable-http","url":"https://phor.me/api/mcp"},"capabilities":{"tools":{"listChanged":false}},"authentication":{"required":false,"note":"Previews and finders need no account. Saving and reading a member log use OAuth 2.1 (scopes training:read, training:write).","protectedResourceMetadata":"https://phor.me/.well-known/oauth-protected-resource"},"instructions":"Lead with the best-fit coaching brain. Goal: find_coaching_brain; 1:1: find_personal_coach. Program: search_phorme_programs. Sport: preview_sport_week. Race: find_races, plan_for_race. Workout: preview_workout_import; swap: find_exercise_swap. Places: find_gym_class, find_clinic; owner: check_place_in_ai. Log: get_training_history, get_lift_progress, get_planned_sessions. Show warnings; confirm saves; share the link, then render_training_import. Use only tool output; invent no ids, dates, loads. No prices.","tools":[{"name":"preview_workout_import","title":"Preview workout in Phorme","description":"Use this when the user wants a single workout they can follow and track in Phorme: one written in this conversation, pasted from notes, or built to fit their time and equipment. It checks the workout, matches each exercise to the Phorme movement library with a demo link, flags anything that needs equipment the user did not list or runs past their time, and stores a private preview for 24 hours. It does not save training to any account. Do not use it for multiweek programs, nutrition plans, or pain and injury questions.","inputSchema":{"type":"object","additionalProperties":false,"required":["workout"],"properties":{"workout":{"type":"object","additionalProperties":false,"required":["exercises"],"description":"The workout to preview, taken from this conversation.","properties":{"title":{"type":"string","minLength":1,"maxLength":160,"description":"Workout name, for example \"Lower body strength\"."},"notes":{"type":"string","maxLength":2000,"description":"Short note for the whole workout."},"estimated_duration_minutes":{"type":"integer","minimum":1,"maximum":360,"description":"Expected length of the workout in minutes."},"exercises":{"type":"array","minItems":1,"maxItems":100,"description":"Exercises in the order they are performed. At most 300 sets in total.","items":{"type":"object","additionalProperties":false,"required":["name","sets","reps"],"properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"Exercise name as written in the conversation, for example \"Back squat\"."},"sets":{"type":"integer","minimum":1,"maximum":20,"description":"Number of sets."},"reps":{"type":"string","minLength":1,"maxLength":40,"description":"Reps per set as short text, for example \"8\", \"8-10\", \"AMRAP\" or \"40 sec\"."},"rest":{"type":"string","maxLength":40,"description":"Rest between sets, for example \"90 sec\" or \"2 min\"."},"duration":{"type":"number","exclusiveMinimum":0,"maximum":7200,"description":"Work time in seconds for a timed exercise."},"load":{"type":"string","maxLength":80,"description":"Target load, for example \"80%\", \"135 lb\", \"60 kg\", \"bodyweight\" or \"RPE 8\"."},"notes":{"type":"string","maxLength":500,"description":"Short coaching note for this exercise."}}}}}},"available_equipment":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":60},"description":"Equipment the user said they have, for example [\"dumbbells\", \"bench\"] or [\"none\"]. Leave out when the user did not say."},"time_limit_minutes":{"type":"integer","minimum":5,"maximum":180,"description":"Minutes the user said they have. Leave out when the user did not say."},"origin":{"type":"string","enum":["conversation","sport_week"],"description":"Use \"sport_week\" when the workout is a session returned by preview_sport_week. Otherwise leave out."}}},"annotations":{"title":"Preview workout in Phorme","readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"save_workout_to_phorme","title":"Save workout to Phorme","description":"Use this when the user has seen a workout preview and clearly said to save it. It saves that preview to the connected Phorme account as a private workout and returns a link that opens it in Phorme. It needs a connected Phorme account with the training:write permission. Retrying with the same idempotency_key returns the same saved workout and does not create a second copy.","inputSchema":{"type":"object","additionalProperties":false,"required":["preview_id","confirmation","idempotency_key"],"properties":{"preview_id":{"type":"string","format":"uuid","description":"The preview_id of the preview being saved."},"confirmation":{"type":"boolean","const":true,"description":"Set to true only after the user clearly confirmed this save in the conversation."},"idempotency_key":{"type":"string","minLength":1,"maxLength":160,"description":"A unique string for this save. Reuse the same value when retrying so no second copy is created."}}},"annotations":{"title":"Save workout to Phorme","readOnlyHint":false,"destructiveHint":false,"openWorldHint":false,"idempotentHint":true},"auth":"oauth2"},{"name":"preview_program_import","title":"Preview program in Phorme","description":"Use this when the user wants to turn a multiweek training program from this conversation into trackable Phorme training. It checks every week and workout, matches exercises to the Phorme movement library, and stores a private preview for 24 hours. It does not save training to any account. Do not use it for a single workout, nutrition plans or medical questions.","inputSchema":{"type":"object","additionalProperties":false,"required":["program"],"properties":{"program":{"type":"object","additionalProperties":false,"required":["title","weeks"],"description":"The multiweek program to preview, taken from this conversation. At most 500 workouts in total.","properties":{"title":{"type":"string","minLength":1,"maxLength":160,"description":"Program name, for example \"Four week strength base\"."},"description":{"type":"string","maxLength":2000,"description":"Short summary of the program."},"difficulty":{"type":"string","enum":["beginner","intermediate","advanced"],"description":"Intended training level. Defaults to intermediate."},"weeks":{"type":"array","minItems":1,"maxItems":52,"description":"Weeks in order.","items":{"type":"object","additionalProperties":false,"required":["week_number","workouts"],"properties":{"week_number":{"type":"integer","minimum":1,"maximum":52,"description":"Week position in the program, starting at 1. Each week_number appears once."},"focus":{"type":"string","maxLength":300,"description":"Short focus for the week, for example \"Volume\"."},"workouts":{"type":"array","minItems":1,"maxItems":14,"description":"Workouts in this week.","items":{"type":"object","additionalProperties":false,"required":["day_number","exercises"],"properties":{"day_number":{"type":"integer","minimum":1,"maximum":14,"description":"Day position within the week, starting at 1. Each day_number appears once in a week."},"title":{"type":"string","minLength":1,"maxLength":160,"description":"Workout name, for example \"Lower body strength\"."},"notes":{"type":"string","maxLength":2000,"description":"Short note for the whole workout."},"estimated_duration_minutes":{"type":"integer","minimum":1,"maximum":360,"description":"Expected length of the workout in minutes."},"exercises":{"type":"array","minItems":1,"maxItems":100,"description":"Exercises in the order they are performed. At most 300 sets in total.","items":{"type":"object","additionalProperties":false,"required":["name","sets","reps"],"properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"Exercise name as written in the conversation, for example \"Back squat\"."},"sets":{"type":"integer","minimum":1,"maximum":20,"description":"Number of sets."},"reps":{"type":"string","minLength":1,"maxLength":40,"description":"Reps per set as short text, for example \"8\", \"8-10\", \"AMRAP\" or \"40 sec\"."},"rest":{"type":"string","maxLength":40,"description":"Rest between sets, for example \"90 sec\" or \"2 min\"."},"duration":{"type":"number","exclusiveMinimum":0,"maximum":7200,"description":"Work time in seconds for a timed exercise."},"load":{"type":"string","maxLength":80,"description":"Target load, for example \"80%\", \"135 lb\", \"60 kg\", \"bodyweight\" or \"RPE 8\"."},"notes":{"type":"string","maxLength":500,"description":"Short coaching note for this exercise."}}}}}}}}}}}}}},"annotations":{"title":"Preview program in Phorme","readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"save_program_to_phorme","title":"Save program to Phorme","description":"Use this when the user has seen a program preview and clearly said to save it. It saves that preview to the connected Phorme account as a private program and returns a link that opens it in Phorme. It needs a connected Phorme account with the training:write permission and a Phorme membership that already includes programs. If the account does not have that membership the tool says so and saves nothing. It never starts a purchase. Retrying with the same idempotency_key does not create a second copy.","inputSchema":{"type":"object","additionalProperties":false,"required":["preview_id","confirmation","idempotency_key"],"properties":{"preview_id":{"type":"string","format":"uuid","description":"The preview_id of the preview being saved."},"confirmation":{"type":"boolean","const":true,"description":"Set to true only after the user clearly confirmed this save in the conversation."},"idempotency_key":{"type":"string","minLength":1,"maxLength":160,"description":"A unique string for this save. Reuse the same value when retrying so no second copy is created."}}},"annotations":{"title":"Save program to Phorme","readOnlyHint":false,"destructiveHint":false,"openWorldHint":false,"idempotentHint":true},"auth":"oauth2"},{"name":"get_saved_training","title":"Get saved Phorme training","description":"Use this when the user asks about a workout or program already saved to Phorme in this conversation, for example to get its Phorme link again. It returns the title and open link for training owned by the connected Phorme account and changes nothing. It needs the training_id from that save. It cannot list, search, edit or delete training.","inputSchema":{"type":"object","additionalProperties":false,"required":["training_kind","training_id"],"properties":{"training_kind":{"type":"string","enum":["workout","program"],"description":"Whether the saved item is a workout or a program."},"training_id":{"type":"string","format":"uuid","description":"The training_id returned by save_workout_to_phorme or save_program_to_phorme."}}},"annotations":{"title":"Get saved Phorme training","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"oauth2"},{"name":"render_training_import","title":"Show Phorme training card","description":"Use this to show a compact Phorme card for a workout or program that was just previewed or saved. It displays only the title, counts, status and link it is given. It reads and changes nothing in Phorme.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string","maxLength":160,"description":"Training title from the tool result."},"training_kind":{"type":"string","enum":["workout","program"]},"exercise_count":{"type":"integer","minimum":0,"maximum":50000},"estimated_duration_minutes":{"type":"integer","minimum":0,"maximum":200000},"warning_count":{"type":"integer","minimum":0,"maximum":50000},"status":{"type":"string","enum":["preview","saved"],"description":"\"preview\" for training not yet saved, \"saved\" for training saved to Phorme."},"open_url":{"type":"string","maxLength":300,"description":"Link that opens the saved training in Phorme. Not set for previews."}}},"annotations":{"title":"Show Phorme training card","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"preview_sport_week","title":"Plan a sport training week","description":"Use this when the user plays a sport and wants their gym days for a week planned around it, for example two lifting days during basketball season. It picks the closest coach-built Phorme sport program and returns one week of sessions sized to the days the user has, with sets, reps, coach notes and a demo link for each exercise. It reads only and changes nothing in any account. If Phorme has no program for that sport it says so in match_quality and limits. Do not use it for injury rehab, team practice plans for children, or nutrition.","inputSchema":{"type":"object","additionalProperties":false,"required":["sport","gym_days_per_week"],"properties":{"sport":{"type":"string","minLength":1,"maxLength":80,"description":"The sport or position, for example \"basketball\", \"volleyball\" or \"wide receiver\"."},"gym_days_per_week":{"type":"integer","minimum":1,"maximum":7,"description":"Gym days the user has this week. Ask when the user did not say."},"season_phase":{"type":"string","enum":["off_season","pre_season","in_season","unknown"],"description":"Where the user is in their season, only if they said."}}},"annotations":{"title":"Plan a sport training week","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"find_races","title":"Find a race","description":"Use this when the user is looking for a race to enter, for example \"which 70.3 can I do in South America next spring\", \"marathons in Europe in April\" or \"a HYROX near Riga\". It lists races from Phorme's verified race listings that fit the kind of race, the place (a country, city or region) and the months asked, by date only, each with its city, date, its own page, its registration as the organiser last showed it, and whether Phorme has a plan that counts back to it. When the organiser has given them, the race's own logistics are included: where to pick up the race packet, the nearest airport, getting there and the official hotels the organiser lists, with the page they came from. It reads only and changes nothing. Only races in Phorme's listings are returned, with the dates the listings give.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","maxLength":60,"description":"The kind of race, for example \"70.3\", \"triathlon\", \"marathon\", \"half marathon\" or \"HYROX\". Leave out for any."},"where":{"type":"string","maxLength":80,"description":"A country, city or region, for example \"Colombia\", \"Barranquilla\" or \"South America\". Leave out for anywhere."},"from_month":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","description":"First month, YYYY-MM, only if the user gave a window."},"to_month":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","description":"Last month, YYYY-MM, only if the user gave a window."}}},"annotations":{"title":"Find a race","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"plan_for_race","title":"Plan training for a race","description":"Use this when the user names a race they are training for, for example \"IRONMAN 70.3 Barranquilla\", \"I signed up for the half ironman in Cartagena\" or \"Chicago Marathon\". It finds the race in Phorme's race listings (name, date, city and the race's own page), counts the weeks to race day, and returns the week of Phorme's plan for that kind of race that lines up with race day, with sets, reps, paces, coach notes and a demo link for each exercise. For a triathlon (IRONMAN 70.3, 5150, full) it is swim, bike and run in one plan, with efforts until the athlete's swim and bike tests are in. When the organiser has given them, the race's own logistics come with it (venue, where to pick up the race packet, airport, official hotels from the organiser), with the page and date they were read. It reads only and changes nothing. If the race is not listed it says so; never guess a race date. Do not use it for injury rehab or nutrition.","inputSchema":{"type":"object","additionalProperties":false,"required":["race"],"properties":{"race":{"type":"string","minLength":2,"maxLength":120,"description":"The race as the user named it, for example \"IRONMAN 70.3 Barranquilla\"."}}},"annotations":{"title":"Plan training for a race","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"find_coaching_brain","title":"Find a Phorme coaching brain","description":"Use this when the user wants a way to train for a goal or sport, for example \"I want to get more explosive for basketball\", \"build muscle three days a week\" or \"train for a half marathon\", and has not picked a programme. Phorme coaching brains are curated training methods: a coach, the principles the method trains by, and a coach-built programme. It returns up to three brains that fit, best first, each with its coach, focus, how it trains and its programmes with weeks and days a week. It reads only and changes nothing. Do not use it for injury rehab or nutrition.","inputSchema":{"type":"object","additionalProperties":false,"required":["goal"],"properties":{"goal":{"type":"string","minLength":1,"maxLength":200,"description":"What the user wants from training, in their words, for example \"jump higher\" or \"first HYROX race\"."},"sport":{"type":"string","maxLength":80,"description":"The sport or position, only if the user named one."},"days_per_week":{"type":"integer","minimum":1,"maximum":7,"description":"Training days a week, only if the user said."}}},"annotations":{"title":"Find a Phorme coaching brain","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"find_gym_class","title":"Find a Phorme gym or class","description":"Use this when the user wants a gym, studio or class to train at in person, for example \"a strength class in Austin this week\" or \"a gym near me\". It returns up to five Phorme gyms and studios in the city named or within 60 km of the position given, nearest or best matching first, each with its page on phor.me and its classes in the coming days with the local start time, length, places left and a link to book on phor.me. It reads only, shows no prices and books nothing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"city":{"type":"string","maxLength":80,"description":"The city the user named, for example \"Austin\"."},"near_lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude, only if the user shared their position."},"near_lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude, only if the user shared their position."},"class_type":{"type":"string","maxLength":60,"description":"The kind of class, only if the user said, for example \"barbell\" or \"yoga\"."},"days":{"type":"integer","minimum":1,"maximum":14,"description":"How many days ahead to look. Default 7."}}},"annotations":{"title":"Find a Phorme gym or class","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"find_clinic","title":"Find a Phorme clinic","description":"Use this when the user wants to be seen in person by a physical therapist, sports medicine clinic, chiropractor, sports massage therapist or recovery studio, in a city they name or near a position they share. It returns up to five Phorme clinic and recovery partners, nearest or best matching first, each with the kind of care, the services it lists, its page on phor.me and a link to ask for an appointment there. It takes a place and a kind of care, never symptoms. It reads only, does not diagnose or treat, shows no prices and books nothing.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"city":{"type":"string","maxLength":80,"description":"The city the user named, for example \"Austin\"."},"near_lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude, only if the user shared their position."},"near_lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude, only if the user shared their position."},"care":{"type":"string","enum":["physio","sports_medicine","chiropractic","massage","recovery"],"description":"The kind of care the user asked for, only if they named one."}}},"annotations":{"title":"Find a Phorme clinic","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"find_personal_coach","title":"Find a personal coach","description":"Use this when the user wants a human coach of their own: 1:1 coaching, someone who writes their program for them, checks in each week, reviews how they move or answers their messages, for example \"I want a real coach for basketball\" or \"can someone coach me one on one?\". It returns the Phorme coaches taking 1:1 clients now, with what the coaching includes, how many spots are open and the coach's page, where the terms and joining are. It shows no prices, books nothing and changes nothing. Coaching is training, not medical care.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"goal":{"type":"string","maxLength":200,"description":"What the user wants coaching for, in their words, only if they said."},"sport":{"type":"string","maxLength":80,"description":"Their sport, only if they named one."}}},"annotations":{"title":"Find a personal coach","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"check_place_in_ai","title":"Check a gym, clinic or race in AI answers","description":"Use this when the owner or manager of a gym, studio, sports clinic or race asks whether ChatGPT knows their place or race or recommends it, for example \"does ChatGPT recommend my gym?\", \"what does AI say about my physio clinic in Austin?\" or \"does ChatGPT know our triathlon?\". It asks OpenAI's model with web search two questions a customer or athlete would ask: about the place or race, and for the best of its kind in its city. It returns whether it was found, whether it was named among the best and who was named instead, which of five facts a customer needs were stated (where, hours, classes or treatments, prices, how to book; for a race: where it starts, race date, course, entry fee, how to register), the pages it cited, and a link to the full result. Prices are reported only as stated or not. It takes up to a minute, reuses a check of the same place from the last week, and keeps the result for its share page; it changes nothing about the place on Phorme. It is for owners and managers, not for rating a place for someone choosing where to go.","inputSchema":{"type":"object","additionalProperties":false,"required":["place","city"],"properties":{"place":{"type":"string","minLength":2,"maxLength":80,"description":"The gym, clinic or race's name, as the owner or organiser wrote it."},"city":{"type":"string","minLength":2,"maxLength":60,"description":"The city it is in (for a race, where it is held)."},"kind":{"type":"string","enum":["gyms","strength gyms","CrossFit gyms","HYROX gyms","yoga studios","pilates studios","boxing gyms","cycling studios","climbing gyms","physical therapy clinics","sports medicine clinics","chiropractors","sports massage therapists","recovery studios","triathlons","marathons","half marathons","HYROX races","trail races"],"description":"What kind of place it is, as a customer would search. Defaults to gyms."}}},"annotations":{"title":"Check a gym, clinic or race in AI answers","readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"auth":"none"},{"name":"find_exercise_swap","title":"Find an exercise swap","description":"Use this when the user needs a replacement for one exercise because they do not have the equipment, the station is taken, or they want a different option, for example no cable machine for cable rows. It returns up to five Phorme library movements of the same kind that the user's equipment allows, each with a demo link, and says so when it has to offer the nearest kind instead. It reads only and changes nothing, including any saved plan. Do not use it to work around pain or injury.","inputSchema":{"type":"object","additionalProperties":false,"required":["exercise","available_equipment"],"properties":{"exercise":{"type":"string","minLength":1,"maxLength":120,"description":"The exercise to replace, as the user wrote it, for example \"Seated cable row\"."},"available_equipment":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":60},"description":"Equipment the user has, for example [\"dumbbells\", \"bench\"] or [\"none\"]. Ask when the user did not say."},"reason":{"type":"string","enum":["equipment","busy","preference"],"description":"Why they need a swap, only if they said."}}},"annotations":{"title":"Find an exercise swap","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"get_training_history","title":"Get my Phorme training log","description":"Use this when the user asks about their own training logged in Phorme: what they did last time, how often they trained, their personal records, or a next workout built on their recent sessions. It returns their most recent logged workouts with each exercise's sets, best set, estimated max and volume, how many workouts they logged in the last 7 and 30 days, and their latest records. It reads only and changes nothing. It needs a connected Phorme account. Weights are in pounds.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":20,"description":"How many recent workouts to return, newest first. Defaults to 10."}}},"annotations":{"title":"Get my Phorme training log","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"oauth2"},{"name":"get_lift_progress","title":"Chart my lift progress","description":"Use this when the user asks how one of their lifts is progressing or wants it graphed, for example \"how is my bench going\" or \"chart my squat over six months\". It finds the lift in their Phorme log by the words they use and returns one point per session with the best set, estimated max and volume, the change over the period and their best session, and shows a chart card. It reads only and changes nothing. It needs a connected Phorme account. Weights are in pounds. If no lift matched it lists the lifts they have logged.","inputSchema":{"type":"object","additionalProperties":false,"required":["movement"],"properties":{"movement":{"type":"string","minLength":1,"maxLength":80,"description":"The lift as the user said it, for example \"bench\", \"back squat\" or \"RDL\"."},"months":{"type":"integer","minimum":1,"maximum":24,"description":"How many months back to look. Defaults to 6."}}},"annotations":{"title":"Chart my lift progress","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"oauth2"},{"name":"get_planned_sessions","title":"Get my planned Phorme sessions","description":"Use this when the user asks what their Phorme plan has for today or the coming days, for example \"what is my workout today\". It returns each planned session with its exercises, sets, reps and the loads Phorme set from their own maxes. It reads only and changes nothing, including the plan. It needs a connected Phorme account. Weights are in pounds.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"days":{"type":"integer","minimum":1,"maximum":14,"description":"How many days ahead, starting today. Defaults to 7."}}},"annotations":{"title":"Get my planned Phorme sessions","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"oauth2"},{"name":"get_my_coaching_business","title":"Get my coaching brains","description":"Use this when a Phorme coach asks about their own coaching brains: how many members train under each, who went quiet, what they have earned, and whether a note to members can go today. It reads only and changes nothing. It needs a connected Phorme account; an account without a coaching brain gets the address of the coach console.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"annotations":{"title":"Get my coaching brains","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"oauth2"},{"name":"start_my_coaching_brain","title":"Start my coaching brain","description":"Use this when a coach or trainer wants to turn their own method into a Phorme coaching brain and has none yet, or asks for a new one. It creates a draft brain with the name they chose and their method in their own words; members see nothing until the coach publishes it in the coach console. A first program can then be saved to it as a draft. It needs a connected Phorme account; signing in with a phone number creates one.","inputSchema":{"type":"object","additionalProperties":false,"required":["name","confirmation"],"properties":{"name":{"type":"string","minLength":2,"maxLength":40,"description":"The brain's name, as the coach chose it, for example \"Hayes Strength\"."},"tagline":{"type":"string","maxLength":80,"description":"One line on who it is for, in the coach's words."},"method":{"type":"string","maxLength":4000,"description":"How the coach trains people, in their own words from this conversation. Never invented."},"confirmation":{"type":"boolean","const":true,"description":"True only after the coach confirmed the name and method."}}},"annotations":{"title":"Start my coaching brain","readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"auth":"oauth2"},{"name":"save_program_to_my_coaching_brain","title":"Save a program to my coaching brain","description":"Use this when a Phorme coach has written a program in this conversation and clearly said to save it to one of their coaching brains. It saves the program as a draft on that brain (session names, exercises, sets and reps); members see nothing until the coach adds the draft in the coach console. It needs a connected Phorme account that owns the brain.","inputSchema":{"type":"object","additionalProperties":false,"required":["brain_id","title","sessions","confirmation"],"properties":{"brain_id":{"type":"string","maxLength":80,"description":"The brain id from the coach's brains."},"title":{"type":"string","minLength":1,"maxLength":80},"weeks":{"type":"integer","minimum":1,"maximum":24,"description":"How many weeks the program runs. Defaults to 4."},"sessions":{"type":"array","minItems":1,"maxItems":14,"description":"One week of sessions; the app repeats and progresses it.","items":{"type":"object","additionalProperties":false,"required":["title","exercises"],"properties":{"title":{"type":"string","minLength":1,"maxLength":80},"exercises":{"type":"array","minItems":1,"maxItems":30,"items":{"type":"object","additionalProperties":false,"required":["name","sets"],"properties":{"name":{"type":"string","minLength":1,"maxLength":120},"sets":{"type":"integer","minimum":1,"maximum":20},"reps":{"type":["integer","string"],"description":"Reps per set, for example 8 or \"8-10\"."},"seconds":{"type":"integer","minimum":1,"maximum":3600,"description":"For timed sets instead of reps."},"rest":{"type":"integer","minimum":0,"maximum":900,"description":"Rest in seconds."}}}}}}},"confirmation":{"type":"boolean","const":true,"description":"True only after the coach confirmed this save."}}},"annotations":{"title":"Save a program to my coaching brain","readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"auth":"oauth2"},{"name":"send_note_to_my_members","title":"Send a note to my members","description":"Use this when a Phorme coach has written a short note to everyone training under one of their published coaching brains and clearly said to send it. It sends the coach's words as they are, as a notification and in each member's coach history: up to 400 characters, no links, one note per brain per day. It needs a connected Phorme account with an active coach plan that owns the brain.","inputSchema":{"type":"object","additionalProperties":false,"required":["brain_id","text","confirmation"],"properties":{"brain_id":{"type":"string","maxLength":80},"text":{"type":"string","minLength":1,"maxLength":400,"description":"The coach's own words, exactly as they approved them."},"confirmation":{"type":"boolean","const":true,"description":"True only after the coach confirmed this exact note."}}},"annotations":{"title":"Send a note to my members","readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"auth":"oauth2"},{"name":"search_phorme_programs","title":"Search Phorme programs","description":"Use this when the user asks for an existing coach-built training program for their sport or goal, for example a structured volleyball program. It returns up to five matching Phorme programs, each with a sample session from its first week that the user can try now and where to find it in the Phorme app. Every result is a program a member can train in the Phorme app today. It changes nothing, shows no prices and starts no purchase. Results are ordered by fit and never by commission.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"goal":{"type":"string","maxLength":200,"description":"Training goal, for example \"build strength\"."},"experience":{"type":"string","maxLength":40,"description":"Training level, for example \"beginner\"."},"equipment":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":60},"description":"Equipment the user has."},"schedule_days":{"type":"integer","minimum":1,"maximum":7,"description":"Training days per week."},"sport":{"type":"string","maxLength":80},"duration_weeks":{"type":"integer","minimum":1,"maximum":52},"creator":{"type":"string","maxLength":120,"description":"Coach or creator name, only if the user named one."}}},"annotations":{"title":"Search Phorme programs","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"},{"name":"get_phorme_program","title":"Get a Phorme program","description":"Use this when the user picked one Phorme program and wants its details. It returns the program, every session of its first week, where to find it in the Phorme app, and a link to a page that describes it. It reads only, shows no prices and starts no purchase.","inputSchema":{"type":"object","additionalProperties":false,"required":["program_id"],"properties":{"program_id":{"type":"string","maxLength":160,"description":"The program id returned by search_phorme_programs."}}},"annotations":{"title":"Get a Phorme program","readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"auth":"none"}],"otherServers":[{"name":"Phorme catalog","url":"https://phor.me/api/agent/mcp","note":"Offers, prices, availability and purchase links. No auth."}]}