Phorme Training
by phor.me · remote · no sign-in to list tools · v1.6.1 · published by me.phor
Coach-built training: coaching brains, programs, race plans, gyms, clinics, demos and your log.
46 tools: 6 can delete or cancel things, 3 do something that can't be undone, 19 change things and 18 only read.
Scanned Oct 21, 2026
- Deletes or cancels6Claude Code: deny: see these tools
- Can't be undone3Claude Code: ask: see these tools
- Changes things19Claude Code: ask: see these tools
- Only reads18Claude Code: allow: see these tools
4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http phorme-training https://phor.me/api/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "preview_workout_import" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "preview_workout_import" says "preview": a word for reading.
The server marks "preview_program_import" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "preview_program_import" says "preview": a word for reading.
The server marks "render_training_import" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "render_training_import" says "import": a word for a change.
The server marks "get_payout_setup_link" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "get_payout_setup_link" says "get": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
46 tools
Deletes or cancels 6Claude Code: deny
answer_held_requestUse this when an owner wants to accept or decline one ask held for the plan at their place, by its hold_id.No findings
Why it is in this group
- The name "answer_held_request" says "request": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when an owner wants to accept or decline one ask held for the plan at their place, by its hold_id. Read the ask back to the owner first, and set confirmation to true only after they said yes. Accept books the member in (a paid class is held while they pay on Phorme's own page; a full class puts them on the waitlist), or sends a 1:1 request on to the place's email. Decline ends it, with the owner's short note when they gave one. Either way the member hears. Accepting needs the gym plan at that place; the result then gives plan_url instead. It takes no payment. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Answer an ask waiting for my gym
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
cancel_gym_bookingUse this when a signed-in user wants to give up a class they booked, are on the waitlist for, or asked a gym for on Phorme.No findings
Why it is in this group
- The name "cancel_gym_booking" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when a signed-in user wants to give up a class they booked, are on the waitlist for, or asked a gym for on Phorme. Confirm which class with the user first, and set confirmation to true only after they said yes. It cancels that booking for the connected Phorme account and frees the spot for the next person on the waitlist. It takes the booking id, or the class id of the booked class. Sales are final, so a paid class is not refunded. It needs a connected Phorme account with the training:write permission.
Annotations the server declares
- title: Cancel a Phorme gym booking
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
cover_memberUse this when an owner on the gym plan wants to see who is covered or asked to be at one place, or to invite, approve or remove one member, for example "invite my member Sam to tra…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when an owner on the gym plan wants to see who is covered or asked to be at one place, or to invite, approve or remove one member, for example "invite my member Sam to train free". action list reads who is listed and changes nothing. For invite (by the member's phone), approve (a member who asked) and remove, read it back to the owner first, and set confirmation to true only after they said yes. An invite sends the phone a text to join; the member hears once when they are covered or removed. Cover counts only while the gym plan covers the place, up to its cap; past it, new members pay as normal. It takes no payment here. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Cover one member
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
set_class_scheduleUse this when an owner wants to see, add, change or cancel a class at their place.No findings
Why it is in this group
- The name "set_class_schedule" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when an owner wants to see, add, change or cancel a class at their place. action list reads the schedule and changes nothing. For add, edit and cancel, read the class, day and time back to the owner first, and set confirmation to true only after they said yes. A class people booked keeps its time, length and price; a class members paid for cannot be cancelled here. Members pay for a paid class on Phorme's own payment page; this tool takes no payment. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Set my class schedule
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
set_member_coverUse this when an owner on the gym plan wants to pay for their members' Phorme membership at one place, so members train free, or wants to stop.No findings
Why it is in this group
- The name "set_member_cover" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when an owner on the gym plan wants to pay for their members' Phorme membership at one place, so members train free, or wants to stop. Confirm with the owner first, and set confirmation to true only after they said yes. It turns the switch on or off and can lower the cap of members covered (up to 50). Members join from the app and the place approves them. A place not on the gym plan cannot turn it on; the result then gives plan_url, the plan on phor.me. It takes no payment here. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Cover my members
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
- idempotentHint: true
unpublish_placeUse this when an owner wants their place off Phorme for now.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when an owner wants their place off Phorme for now. Confirm with the owner first, and set confirmation to true only after they said yes. Its page, the app's map and the Phorme connector stop listing it; its details and classes are kept, so it can be put live again. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Take my place down
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
- idempotentHint: true
Can't be undone 3Claude Code: ask
publish_gym_brainUse this when an owner wants the changes to their place's coaching brain to reach members, for example after its voice, look or programs changed.No findings
Why it is in this group
- The name "publish_gym_brain" says "publish": a word for a change that another call does not undo.
Description, as the server wrote it Use this when an owner wants the changes to their place's coaching brain to reach members, for example after its voice, look or programs changed. Confirm with the owner first, and set confirmation to true only after they said yes. It runs the same publish checks as the console and publishes the brain when they pass; when one fails it says what is left and members see no change. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Publish my gym's coaching brain
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
- idempotentHint: true
publish_placeUse this when an owner wants their place live on Phorme: its page on phor.me, the app's map and the Phorme connector.No findings
Why it is in this group
- The name "publish_place" says "publish": a word for a change that another call does not undo.
Description, as the server wrote it Use this when an owner wants their place live on Phorme: its page on phor.me, the app's map and the Phorme connector. Confirm with the owner first, and set confirmation to true only after they said yes. Going live needs an email for booking confirmations and requests: request_email, else the place's own, else the account's. Listing is free; when someone asks to book a place that is not on the gym plan, the ask is held 7 days and the owner is told. It takes no payment and starts no plan. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Put my place live
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
- idempotentHint: true
send_note_to_my_membersUse 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.No findings
Why it is in this group
- The name "send_note_to_my_members" says "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- title: Send a note to my members
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
Changes things 19Claude Code: ask
book_gym_classUse this when a signed-in user wants a place in one class at a Phorme gym or studio.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Use this when a signed-in user wants a place in one class at a Phorme gym or studio. Confirm the class, the day and time, and the gym with the user first, and set confirmation to true only after they said yes. It books the class for the connected Phorme account: booked when there is a spot, on the waitlist when it is full, a spot held for 15 minutes when the class is paid, or a request the gym is told about when the gym has not opened booking on Phorme yet. A paid class is paid on Phorme's own payment page, through a link in the result. This tool takes no payment, names no amount and never sells a subscription or membership. Booking the same class again returns the same booking. It needs a connected Phorme account with the training:write permission.
Annotations the server declares
- title: Book a Phorme gym class
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
- idempotentHint: true
check_place_in_aiUse 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 g…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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, and a fact counts as stated only when the answer gave it. It also returns a free next step: a link to claim the place on Phorme (for a race, the race organiser page). It takes up to a minute, reuses a check of the same place from the last week, and saves the result as a 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.
Annotations the server declares
- title: Check a gym, clinic or race in AI answers
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
- idempotentHint: true
claim_placeUse this when an owner says a gym Phorme already lists is theirs and nobody runs it on Phorme yet, for example "that gym is mine".No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Use this when an owner says a gym Phorme already lists is theirs and nobody runs it on Phorme yet, for example "that gym is mine". Confirm the place with the owner first, and set confirmation to true only after they said yes. It never hands the place over by itself: Phorme sends a six digit code to the email or phone the place has on file, not to the person asking. Whoever reads that inbox or phone gives them the code, and entering it makes them the owner. A place with neither on file waits for Phorme's team. It takes no payment. It needs a connected Phorme account.
Annotations the server declares
- title: Claim a place nobody runs
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
create_or_claim_placeUse this when a gym, studio or clinic owner wants their place on Phorme, for example after an AI check, or says "list my gym".No findings
Why it is in this group
- The name "create_or_claim_place" says "create": a word for a change.
Description, as the server wrote it Use this when a gym, studio or clinic owner wants their place on Phorme, for example after an AI check, or says "list my gym". Confirm the name, city and address with the owner first, and set confirmation to true only after they said yes. It lists the place for the connected account as a draft nobody sees yet, with its page facts, and finds the map pin from the address. If the account already lists a place with that name in that city it returns that place and changes nothing. Listing is free; it takes no payment and starts no plan. It needs a connected Phorme account.
Annotations the server declares
- title: List or claim my place
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
get_payout_setup_linkUse this when an owner wants their share paid to their bank and has not set it up, for example when no bank is set up yet.1 finding
Why it is in this group
- The name "get_payout_setup_link" says "get": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "get_payout_setup_link" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "get_payout_setup_link" says "get": a word for reading.
Description, as the server wrote it Use this when an owner wants their share paid to their bank and has not set it up, for example when no bank is set up yet. Confirm with the owner first, and set confirmation to true only after they said yes. It returns a link to Stripe's own form, where the owner gives their bank to Stripe. It is a link only: the bank is never given in the chat, and it takes no payment. It needs a connected Phorme account.
Annotations the server declares
- title: Get my payout setup link
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
- idempotentHint: true
plan_for_raceUse 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".No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Plan training for a race
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
preview_program_importUse this when the user wants to turn a multiweek training program from this conversation into trackable Phorme training.1 finding
Why it is in this group
- The name "preview_program_import" says "preview": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "preview_program_import" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "preview_program_import" says "preview": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Preview program in Phorme
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
preview_workout_importUse 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.1 finding
Why it is in this group
- The name "preview_workout_import" says "preview": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "preview_workout_import" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "preview_workout_import" says "preview": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Preview workout in Phorme
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
render_training_importUse this to show a compact Phorme card for a workout or program that was just previewed or saved.1 finding
Why it is in this group
- The name "render_training_import" says "import": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "render_training_import" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "render_training_import" says "import": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Show Phorme training card
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
save_program_to_my_coaching_brainUse this when a Phorme coach has written a program in this conversation and clearly said to save it to one of their coaching brains.No findings
Why it is in this group
- The name "save_program_to_my_coaching_brain" says "save": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Save a program to my coaching brain
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
save_program_to_phormeUse this when the user has seen a program preview and clearly said to save it.No findings
Why it is in this group
- The name "save_program_to_phorme" says "save": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Save program to Phorme
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
- idempotentHint: true
save_workout_to_phormeUse this when the user has seen a workout preview and clearly said to save it.No findings
Why it is in this group
- The name "save_workout_to_phorme" says "save": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Save workout to Phorme
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
- idempotentHint: true
set_booking_noticesUse this when an owner wants booking and ask notices for a place sent somewhere else, for example "text my bookings to my phone".No findings
Why it is in this group
- The name "set_booking_notices" says "set": a word for a change.
Description, as the server wrote it Use this when an owner wants booking and ask notices for a place sent somewhere else, for example "text my bookings to my phone". send_to is an email, or a phone that gets them as texts; one at a time, as in the console. An empty send_to sends them to the account's own phone or email. Read it back to the owner first, and set confirmation to true only after they said yes. The phone is never shown on the place's page. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Set where booking notices go
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
- idempotentHint: true
set_owner_emailUse this when an owner who signed in by phone wants notices about their gym plan sent to an email.No findings
Why it is in this group
- The name "set_owner_email" says "set": a word for a change.
Description, as the server wrote it Use this when an owner who signed in by phone wants notices about their gym plan sent to an email. Read the email back to the owner first, and set confirmation to true only after they said yes. An empty email clears it, and notices go to the account's own email or phone. It is never shown to members. It needs a connected Phorme account.
Annotations the server declares
- title: Set my owner email
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
- idempotentHint: true
start_gym_brainUse this when an owner wants a coaching brain for their place, so members train with the gym's own coach in the Phorme app.No findings
Why it is in this group
- The name "start_gym_brain" says "start": a word for a change.
Description, as the server wrote it Use this when an owner wants a coaching brain for their place, so members train with the gym's own coach in the Phorme app. Confirm with the owner first, and set confirmation to true only after they said yes. In one step it makes a brain from the place's name, line and classes, gives it a starting program from the Phorme library, publishes it and puts the place's members under it, the same as the console's one-click start. The owner can change it in the builder after. Free on the free listing too. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Start my gym's coaching brain
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
start_my_coaching_brainUse 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.No findings
Why it is in this group
- The name "start_my_coaching_brain" says "start": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Start my coaching brain
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
update_gym_brainUse this when an owner wants to change how their place's coaching brain sounds or looks: its name, its one line, its voice (how the coach talks to members), its method, its colour …No findings
Why it is in this group
- The name "update_gym_brain" says "update": a word for a change.
Description, as the server wrote it Use this when an owner wants to change how their place's coaching brain sounds or looks: its name, its one line, its voice (how the coach talks to members), its method, its colour or its cover photo. Read the change back to the owner first, and set confirmation to true only after they said yes. Only the things given change; an empty value clears one. It saves to the brain; members get it once the brain is published again. The place needs a coaching brain first. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Change my gym's coaching brain
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
- idempotentHint: true
update_placeUse this when an owner wants to change what their place's page says: name, address, hours, booking link, what kind of place it is, the line about it, its time zone, its phone, its …No findings
Why it is in this group
- The name "update_place" says "update": a word for a change.
Description, as the server wrote it Use this when an owner wants to change what their place's page says: name, address, hours, booking link, what kind of place it is, the line about it, its time zone, its phone, its price list or the email for requests. Read the change back to the owner first, and set confirmation to true only after they said yes. Only the things given change; an empty value clears one. A new address moves the map pin. A live page shows the change at once. The price list only shows what the place charges; nothing is sold here. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: Update my place
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
- idempotentHint: true
verify_place_claimUse this when an owner has the six digit code Phorme sent to their place's own email or phone after they claimed it.No findings
Why it is in this group
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it Use this when an owner has the six digit code Phorme sent to their place's own email or phone after they claimed it. Read the code back to the owner first, and set confirmation to true only after they said yes. A right code makes the connected account the place's owner; a wrong one changes nothing, and after five wrong tries or 24 hours the place must be claimed again. It takes no payment. It needs a connected Phorme account.
Annotations the server declares
- title: Enter my place claim code
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
Only reads 18Claude Code: allow
find_clinicUse 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…No findings
Why it is in this group
- The name "find_clinic" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find a Phorme clinic
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
find_coaching_brainUse 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 ma…No findings
Why it is in this group
- The name "find_coaching_brain" says "find": a word for reading.
Description, as the server wrote it 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", or wants to train with a named coach, for example "train with Cameron Goodson", 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; with a coach named, only that coach's brains. It reads only and changes nothing. Do not use it for injury rehab or nutrition.
Annotations the server declares
- title: Find a Phorme coaching brain
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
find_exercise_swapUse 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 mach…No findings
Why it is in this group
- The name "find_exercise_swap" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find an exercise swap
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
find_gym_classUse 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".No findings
Why it is in this group
- The name "find_gym_class" says "find": a word for reading.
Description, as the server wrote it 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, studios and other places to train in the city named or within 60 km (or radius_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 class id, local start time, length, places left and a link to book on phor.me. When nothing matches it returns alternatives: the nearest places further out, and a home plan from a Phorme coaching brain. It reads only and shows no prices; booking a class for a signed-in user is a separate step.
Annotations the server declares
- title: Find a Phorme gym or class
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
find_personal_coachUse 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 messag…No findings
Why it is in this group
- The name "find_personal_coach" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find a personal coach
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
find_racesUse 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".No findings
Why it is in this group
- The name "find_races" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find a race
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_gym_billing_linkUse this when an owner on the gym plan wants to change the card, see invoices or change how many places the plan covers.No findings
Why it is in this group
- The name "get_gym_billing_link" says "get": a word for reading.
Description, as the server wrote it Use this when an owner on the gym plan wants to change the card, see invoices or change how many places the plan covers. It returns a link to Stripe's own billing page for the owner to open. It is a link only: nothing is paid or changed in the chat, and it changes nothing by itself. It needs a connected Phorme account.
Annotations the server declares
- title: Get my gym billing link
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_gym_reportUse this when a gym, studio or clinic owner asks about their own places on Phorme: what is listed, what is live, and how each place did, for example "how is my gym doing on Phorme?…No findings
Why it is in this group
- The name "get_gym_report" says "get": a word for reading.
Description, as the server wrote it Use this when a gym, studio or clinic owner asks about their own places on Phorme: what is listed, what is live, and how each place did, for example "how is my gym doing on Phorme?" or "did anyone book this week?". It returns each place the connected account lists, with its page and status, and its report: times shown by assistants, page views, asks held, bookings, requests, members and the share earned. A place on the free listing shows a little reach and what it missed; the rest is locked, the same as the web console. It reads only and changes nothing. It needs a connected Phorme account.
Annotations the server declares
- title: Get my gym report
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_lift_progressUse 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".No findings
Why it is in this group
- The name "get_lift_progress" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Chart my lift progress
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_my_coaching_businessUse 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 to…No findings
Why it is in this group
- The name "get_my_coaching_business" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get my coaching brains
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_payoutsUse this when an owner asks what Phorme paid them, or what goes out next, for example "what did Phorme pay my gym?".No findings
Why it is in this group
- The name "get_payouts" says "get": a word for reading.
Description, as the server wrote it Use this when an owner asks what Phorme paid them, or what goes out next, for example "what did Phorme pay my gym?". It returns what the account earned, what was paid out, what is going out, what is owed now, whether a bank is set up, and each recent payout. It reads only and changes nothing. It needs a connected Phorme account.
Annotations the server declares
- title: Get my payouts
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_phorme_programUse this when the user picked one Phorme program and wants its details.No findings
Why it is in this group
- The name "get_phorme_program" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get a Phorme program
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_planned_sessionsUse this when the user asks what their Phorme plan has for today or the coming days, for example "what is my workout today".No findings
Why it is in this group
- The name "get_planned_sessions" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get my planned Phorme sessions
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_saved_trainingUse 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.No findings
Why it is in this group
- The name "get_saved_training" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get saved Phorme training
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
get_training_historyUse 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 rec…No findings
Why it is in this group
- The name "get_training_history" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get my Phorme training log
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
list_held_requestsUse this when an owner asks who wants to book or visit their place, for example "who asked to book this week?".No findings
Why it is in this group
- The name "list_held_requests" says "list": a word for reading.
Description, as the server wrote it Use this when an owner asks who wants to book or visit their place, for example "who asked to book this week?". At a place not on the gym plan, class bookings and 1:1 requests are held for 7 days. It returns each one waiting: its hold_id, the place, the class and its local time (or that it is a 1:1 request), the member's first name, their note and best times, when it expires, and whether it can be accepted now. It reads only and changes nothing. It needs a connected Phorme account that owns the place.
Annotations the server declares
- title: List asks waiting for my gym
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
preview_sport_weekUse 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.No findings
Why it is in this group
- The name "preview_sport_week" says "preview": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Plan a sport training week
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
search_phorme_programsUse this when the user asks for an existing coach-built training program for their sport or goal, for example a structured volleyball program.No findings
Why it is in this group
- The name "search_phorme_programs" says "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Search Phorme programs
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.6.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http phorme-training https://phor.me/api/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__phorme-training__get_saved_training",
"mcp__phorme-training__preview_sport_week",
"mcp__phorme-training__find_races",
"mcp__phorme-training__find_coaching_brain",
"mcp__phorme-training__find_gym_class",
"mcp__phorme-training__find_clinic",
"mcp__phorme-training__find_personal_coach",
"mcp__phorme-training__find_exercise_swap",
"mcp__phorme-training__get_training_history",
"mcp__phorme-training__get_lift_progress",
"mcp__phorme-training__get_planned_sessions",
"mcp__phorme-training__get_my_coaching_business",
"mcp__phorme-training__get_gym_report",
"mcp__phorme-training__list_held_requests",
"mcp__phorme-training__get_gym_billing_link",
"mcp__phorme-training__get_payouts",
"mcp__phorme-training__search_phorme_programs",
"mcp__phorme-training__get_phorme_program"
],
"ask": [
"mcp__phorme-training__preview_workout_import",
"mcp__phorme-training__save_workout_to_phorme",
"mcp__phorme-training__preview_program_import",
"mcp__phorme-training__save_program_to_phorme",
"mcp__phorme-training__render_training_import",
"mcp__phorme-training__plan_for_race",
"mcp__phorme-training__book_gym_class",
"mcp__phorme-training__check_place_in_ai",
"mcp__phorme-training__start_my_coaching_brain",
"mcp__phorme-training__save_program_to_my_coaching_brain",
"mcp__phorme-training__send_note_to_my_members",
"mcp__phorme-training__create_or_claim_place",
"mcp__phorme-training__update_place",
"mcp__phorme-training__publish_place",
"mcp__phorme-training__start_gym_brain",
"mcp__phorme-training__claim_place",
"mcp__phorme-training__verify_place_claim",
"mcp__phorme-training__update_gym_brain",
"mcp__phorme-training__publish_gym_brain",
"mcp__phorme-training__set_booking_notices",
"mcp__phorme-training__get_payout_setup_link",
"mcp__phorme-training__set_owner_email"
],
"deny": [
"mcp__phorme-training__cancel_gym_booking",
"mcp__phorme-training__set_class_schedule",
"mcp__phorme-training__unpublish_place",
"mcp__phorme-training__set_member_cover",
"mcp__phorme-training__answer_held_request",
"mcp__phorme-training__cover_member"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as phorme-training. Review it before you use it.