Skip to main content
Glama

Server Details

Coach-built training: coaching brains, programs, race plans, gyms, clinics, demos and your log.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
nicksgoat/phorme-mcp
GitHub Stars
0
Server Listing
Phorme Training

TDQS

A4.1/5.0

Scored across 49 tools

Disambiguation4/5

The tools are split across consumer, gym-owner, and coach workflows, and most descriptions make the target resource and action clear. However, several near-neighbors overlap in practice—such as find_coaching_brain vs search_phorme_programs/find_personal_coach, and create_or_claim_place vs claim_place/verify_place_claim—so an agent can still hesitate between them.

Naming Consistency5/5

All tools use snake_case and generally begin with a clear action verb such as find_, get_, set_, publish_, save_, or update_. Minor variations like check_place_in_ai and plan_for_race remain readable and do not break the overall pattern.

Tool Count2/5

At 49 tools, the set is far above the well-scoped 3–15 range and close to the extreme threshold. The multi-sided platform explains some breadth, but the volume creates real tool-selection burden and would benefit from splitting by persona or workflow.

Completeness4/5

Coverage is unusually broad: discovery, booking, training plans, imports/saves, gym-owner listing/publishing/billing, and coach-brain management are all represented. Still, there are lifecycle gaps such as no individual coach-brain publish/update tool, no list/edit/delete for saved training, and no workout-logging operation.

Available Tools

49 tools
answer_held_requestAnswer an ask waiting for my gymA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
noteNoFor decline: a short note to the member, in the owner's words.
answerYes
hold_idYesThe hold_id from list_held_requests.
confirmationYesSet to true only after the owner said yes to this answer.

Output Schema

NameRequiredDescription
holdYesid, outcome (released, declined or expired) and booking_status.
nextYes
plan_urlNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint/openWorldHint annotations, it discloses the full consequence tree: accept books the member (paid class held while they pay on Phorme's page, full class lands them on the waitlist, 1:1 requests forwarded to the place's email), decline ends it with the owner's note, and either way the member is notified. It also states auth prerequisites (a connected Phorme account that owns the place, and the gym plan at that place), the plan_url result, and explicitly that it takes no payment.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the 'Use this when' trigger and tightly packed with consequence detail; nearly every sentence earns its place. It runs long and repeats the 'at their place' scoping, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with an output schema already present, the description covers trigger, workflow gate, downstream effects, auth requirements, and payment behavior. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema already documents note, hold_id, and confirmation. The description still adds real meaning: it constrains confirmation to the post-verbal-yes moment and frames hold_id as coming from list_held_requests, tying the parameter to a concrete workflow.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb pair (accept/decline) and the exact resource (one ask held for the plan at their place, identified by hold_id). It is distinguishable at a glance from list_held_requests, which only surfaces the holds this tool answers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the trigger condition ('when an owner wants to accept or decline one ask held for the plan at their place') and imposes a mandatory pre-step: read the ask back to the owner and only set confirmation=true after they said yes. That is explicit when/when-not with a workflow gate, not vague guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

book_gym_classBook a Phorme gym classA
Idempotent
Inspect

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 finished from the gym's page on phor.me. This tool takes no payment, gives no payment link, 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.

NameRequiredDescriptionDefault
class_idYesThe class_id of the class, from find_gym_class.
place_idNoThe place_id of its gym or studio, from the same find_gym_class result.
confirmationYesSet to true only after the user said yes to this class, day, time and gym.

Output Schema

NameRequiredDescription
nextYesWhat to tell the user next.
classNotitle, starts (local time at the gym) and minutes.
placeNoname, city and page_url of the gym or studio.
statusYesbooked: the user is in. waitlisted: the class is full; Phorme moves them up if a spot opens. pending_payment: the class is paid and the spot is held 15 minutes; they finish booking it from place.page_url. requested: the gym is told they asked; held up to 7 days, not a booking yet. book_on_phorme: nothing was booked; give them book_url.
book_urlYesThe class page on phor.me.
booking_idYesThe booking, for cancel_gym_booking.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: enumerates all four outcome states (booked, waitlist, 15-minute hold for paid classes, request forwarded when booking isn't open), states the permission prerequisite (training:write), and clarifies that no payment, payment link, amount, or subscription is involved. It also discloses idempotent behavior with the concrete consequence ('same class again returns the same booking'), complementing the idempotentHint annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the confirmation requirement, then the outcome model, then guardrails. The payment clause is somewhat repetitive ('takes no payment, gives no payment link, names no amount') but each variant guards a distinct failure mode, so the length is largely earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety/idempotency and an output schema covering return values, the description still supplies the things structured fields can't: the outcome branching, the auth requirement, the confirmation protocol, and the explicit payment boundary. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so class_id, place_id, and confirmation are already fully documented, including the const:true constraint and the find_gym_class provenance. The description reinforces the confirmation semantics but adds no syntax or format detail beyond the schema — baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource + scope: 'book a place in one class at a Phorme gym or studio' for the connected account. An agent can distinguish it from find_gym_class (discovery) and cancel_gym_booking (reversal) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger ('when a signed-in user wants a place in one class') plus a mandatory pre-step ('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 does not name find_gym_class as the required discovery alternative, but the dependency is stated in the schema rather than the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_gym_bookingCancel a Phorme gym bookingA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
class_idNoThe class_id of the booked class, when the booking_id is not known.
booking_idNoThe booking_id from book_gym_class. Give this or class_id.
confirmationYesSet to true only after the user said yes to cancelling this class.

Output Schema

NameRequiredDescription
nextYesWhat to tell the user next.
cancelledYes
booking_idNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint and openWorldHint, and the description adds real behavioral context beyond them: it frees a waitlist spot, paid classes are not refunded ('sales are final'), confirmation must be true only after user consent, and the training:write permission is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and consent requirement, and each sentence carries information (permission, no-refund, waitlist effect). Slightly repetitive on the id parameters, which the schema already covers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with an output schema present, the description supplies everything an agent needs: consent sequencing, auth requirement, refund consequence, and id alternatives. Return values are covered by the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents class_id, booking_id and confirmation. The description restates the either/or id choice and the confirmation gate without adding format or edge-case detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('cancel a Phorme gym booking') and enumerates the covered cases (booked class, waitlist, gym request). An agent can immediately distinguish it from booking-oriented siblings like book_gym_class.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use trigger ('when a signed-in user wants to give up a class'), plus a required confirmation workflow and the permission prerequisite. It does not name a direct alternative tool, but the cancellation-vs-booking split is unambiguous from the name and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_place_in_aiCheck a gym, clinic or race in AI answersA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
cityYesThe city it is in (for a race, where it is held).
kindNoWhat kind of place it is, as a customer would search. Defaults to gyms.
placeYesThe gym, clinic or race's name, as the owner or organiser wrote it.

Output Schema

NameRequiredDescription
cityNo
kindNo
factsYesEach fact a customer needs: fact, stated, value (null for prices).
placeNo
limitsYesWhat this check does not show. Tell the user.
sourcesNo
next_stepNoWhat the next step does, in one line.
checked_atNo
identifiedYesWhether ChatGPT found this specific place.
result_urlYesThe full result on gyms.phor.me. Share it.
facts_statedNo
named_insteadNoPlaces named instead, when it was not.
next_step_urlNoFree next step: claim the place on Phorme (a race: the organiser page). It names no price.
named_in_best_of_cityYesWhether it was named when asked for the best of its kind in the city.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: up-to-a-minute latency, reuse of a check from the last week, that the result is saved as a share page, that nothing about the place on Phorme is changed, and the 'free next step' claim link. These details reconcile with readOnlyHint=false and idempotentHint=true rather than contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger and examples, then behavior and return values, so an agent can stop reading early. However it is a single dense paragraph of roughly ten sentences with some enumerative redundancy that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with an output schema, the description still covers the essentials an agent needs: who it is for, what it consults, latency, caching, side effects, and the shape of the answer. Nothing required for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so place, city, and the kind enum are already documented. The description does clarify race-specific meaning ('where it starts', 'race date') and the customer-facing framing of kind, but adds no syntax or format guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific operation (asks OpenAI's model with web search two customer-like questions about a place or race) and enumerates precisely what it returns: found/not found, named among the best and who instead, five stated facts, cited pages, and a result link. This is clearly distinguishable from siblings like get_gym_report or claim_place.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger (owner or manager asking whether ChatGPT knows or recommends their place) with concrete example phrasings, and an explicit exclusion ('for owners and managers, not for rating a place for someone choosing where to go'). It stops short of naming a specific alternative sibling for the excluded case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

claim_placeClaim a place nobody runsAInspect

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.

NameRequiredDescriptionDefault
viaNoWhere the code goes, when the place has both on file. Default email.
place_idYesThe place_id of the listed place, from find_gym_class.
confirmationYesSet to true only after the owner said yes to claiming this place.

Output Schema

NameRequiredDescription
nextYes
claimYesclaim_id, place_id, place_name, status (code_sent or review), channel, sent_to (masked), expires_at.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say this is a non-read-only, open-world, non-destructive write. The description adds substantial behavior the annotations cannot convey: it does not transfer ownership by itself, a six-digit code goes to the contact on file (not the requester), the code entry completes the handover, places with no contact wait for Phorme's team, and no payment is taken.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The trigger condition leads, then the mechanics, then constraints — a sensible order for an agent. It is a bit long, with several clipped sentences ('It takes no payment. It needs a connected Phorme account.'), but each carries distinct constraints rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-step, manually-verified claim flow, the description covers eligibility, the consent gate, the out-of-band code path, the no-contact fallback, cost, and account requirements. An output schema exists, so return values need not be explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so place_id, via, and confirmation are already documented including the enum default and the const:true constraint. The description reinforces confirmation's intent but adds no syntax, format, or edge-case detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (claim a place) and pins down the exact situation: a place Phorme already lists that nobody runs on Phorme. That condition implicitly separates it from create_or_claim_place (unlisted places) without naming the sibling, which is a minor gap but the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger with a quoted owner utterance ("that gym is mine"), states the prerequisite (connected Phorme account) and the operational instruction to confirm with the owner before setting confirmation=true. Nothing about when to use it is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_coach_from_codeCopy a coaching brain from a codeAInspect

Use this when a coach has another coach's Phorme code and wants to start their own coaching brain from it, for example "start my brain from K7Q2-XR4D". Sent with the code alone, it shows whose brain it is and whether its coach lets other coaches copy it, and changes nothing. Sent with a name and confirmation, it makes a new draft brain from it with its rules and programs, which the coach then makes their own; the coach who made it keeps 10% of what the copy earns. It needs a connected Phorme account; set confirmation to true only after the coach said yes and chose the name.

NameRequiredDescriptionDefault
codeYesThe code as the coach gave it, for example "K7Q2-XR4D", or its phor.me/c/ link.
nameNoThe name the coach chose for their copy. Needed to copy.
confirmationNoTrue only after the coach confirmed the copy and its name.

Output Schema

NameRequiredDescription
nextNo
brainNo
foundNo
copiedYes
console_urlNo
requires_confirmationNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it reveals that the code-only form changes nothing, that the name+confirmation form creates a draft copy with rules and programs, that the originating coach keeps 10% of earnings, and that a connected account is required. These are material behavioral facts an agent could not infer from readOnlyHint/destructiveHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the 'Use this when...' trigger, then the two modes and the account/confirmation caveats. It is a dense paragraph rather than bulleted, but every sentence carries actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage, an output schema, and non-destructive annotations already present, the description fills exactly the remaining gaps: when to use it, what each mode does, the royalty side effect, and the confirmation gating. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains the code-only vs code+name+confirmation branching and the ordering constraint that confirmation should be true only after the coach has agreed and chosen a name. This clarifies how parameters combine, not just what they are.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('copy' a 'coaching brain from a code') and distinguishes itself from siblings like find_coaching_brain and start_my_coaching_brain by describing the copy-from-another-coach scenario. The example phrase ('start my brain from K7Q2-XR4D') anchors the intent unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear triggering condition ('when a coach has another coach's Phorme code and wants to start their own coaching brain from it') and explains the two invocation modes (code alone for preview, name+confirmation for copy). It does not name specific alternative siblings, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cover_memberCover one memberA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
phoneNoFor invite: the member's phone with its country code, for example +15125550100.
actionYes
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
member_idNoFor approve and remove: the member_id from action list.
confirmationNoSet to true only after the owner said yes to this change to who is covered.

Output Schema

NameRequiredDescription
nextYes
coverNoon, plan, state (active, needs_plan or off), cap, covered, asked, invited and left.
memberNoThe member changed, as in members.
membersNoFor list: member_id, label (a name, or the phone's last four), status (asked, invited, covered), counts, asked_at, invited_at, covered_at.
place_idYes
plan_urlNoThe plan on phor.me, a price-free link, when the place is not on it.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic profile (destructive, not read-only, open-world). The description goes well beyond: invite sends the phone an SMS, the member is notified once when covered or removed, cover counts only while the gym plan covers the place up to its cap with normal payment beyond it, no payment is taken here, and a connected Phorme account owning the place is required. These are exactly the side effects and prerequisites an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the triggering situation and packed with signal, with no filler sentences. It is a dense single paragraph though, mixing invocation guidance, side effects and billing caveats, so scanning is slightly harder than a structured layout would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema available, return values need not be explained, and the description still covers auth prerequisites, the confirmation gate, notification side effects, and the billing cap. Nothing essential for correct invocation is missing apart from the sibling-tool routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 80%, so the baseline is 3, but the description adds real meaning: phone is specifically for invite, member_id is for approve/remove and comes from action=list, and confirmation must be true only after the owner verbally agrees. That maps the enum values to their required parameters in a way the schema does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb set (list/invite/approve/remove) against a specific resource (one member's cover on the owner's gym plan), so an agent knows exactly what the tool does. However, it never names the obviously related sibling set_member_cover, so the one-member-vs-bulk distinction has to be inferred from the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use context ('an owner on the gym plan wants to see who is covered... or to invite, approve or remove one member') and even a sample utterance. It also prescribes the read-back-and-confirm protocol for the mutating actions. It stops short of naming when NOT to use it or pointing at an alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_or_claim_placeList or claim my placeAInspect

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.

NameRequiredDescriptionDefault
latNoLatitude of the map pin, only to set it by hand.
lonNoLongitude of the map pin, only to set it by hand.
cityYes
kindNoWhat the place is: gym (also studios and boxes) or a kind of care.
lineNoOne line on what the place is, in the owner's words.
nameYesThe place's name, as the owner wrote it.
aboutNoOne or two plain sentences about the place, in the owner's words.
hoursNoOpening hours, one line each, for example ["Mon to Fri, 6 am to 9 pm", "Sat, 8 am to noon"].
phoneNoThe place's public phone number, as the owner gave it.
pricesNoWhat training at the place costs, shown on its page, in the owner's own words: one line each, for example "Drop-in 25 dollars", or { label, amount (in dollars) or amount_cents, period, note }. At most 12; an empty list clears them. Repeat them only to the owner.
addressNoThe street address. The map pin is found from it.
countryYesFor example "United States".
websiteNoThe place's own website, starting with https://.
book_urlNoThe place's own booking page, starting with https://.
timezoneNoThe place's IANA time zone, for example "America/Chicago".
book_labelNoThe words on its booking button, for example "Book a class".
confirmationYesSet to true only after the owner said yes to listing this place.
request_emailNoWhere booking confirmations and requests are emailed. Never shown in public.

Output Schema

NameRequiredDescription
nextYesWhat to tell the owner next.
placeYesThe place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan).
statusYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only declare readOnly=false, destructive=false, openWorld=false), the description discloses that the result is an invisible draft, that page facts are captured and the map pin is derived from the address, that an existing name+city match is returned unchanged, that no payment or plan starts, and that a connected Phorme account is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the when-to-use trigger, then the confirmation workflow, then side effects and constraints, then the account prerequisite. Every sentence carries a distinct fact (draft visibility, pin lookup, idempotency, no charge) with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter mutation with an output schema available, the description covers all that remains necessary: purpose, trigger, human-confirmation requirement, side effects, idempotency, cost posture, and auth prerequisite. Return values are correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 94%, so the schema already documents all 18 fields thoroughly. The description only reiterates the confirmation gating and the address-to-pin behavior, which the schema already states, so it adds little new parameter meaning beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource (list/claim the owner's place on Phorme) and pins down the exact scope: a private draft that nobody else sees. It also implicitly separates the operation from publishing/updating by describing the draft-only, idempotent claim behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the precise trigger ('when a gym, studio or clinic owner wants their place on Phorme, for example after an AI check, or says "list my gym"') and the required precondition workflow (confirm name, city and address; set confirmation=true only after the owner agrees). This is explicit both about when to reach for the tool and how to gate it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_clinicFind a Phorme clinicA
Read-only
Inspect

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, when they name none, near the approximate location the assistant shares. 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.

NameRequiredDescriptionDefault
careNoThe kind of care the user asked for, only if they named one.
cityNoThe city the user named, for example "Austin".

Output Schema

NameRequiredDescription
limitsYesWhat this does not cover. Tell the user.
clinicsYesClinics, nearest or best matching first: name, care, line, city, country, distance_km, page_url, request_url and services.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses that results are capped at five, ordered nearest or best matching first, and include care type, listed services, a phor.me page, and an appointment-request link. It also explicitly states what the tool does not do: diagnose, treat, show prices, or book.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary use case, then adds return behavior and guardrails in a compact sequence. Although it is detailed, every clause contributes useful selection or invocation context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is complete for a two-parameter, optional-input, read-only search tool: it explains when to use it, how location is resolved, what is returned, and what it must not be used for. An output schema exists, so the description need not fully document the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents both parameters, so the baseline is 3. The description adds useful semantic guidance: it takes a place and a kind of care, never symptoms, and clarifies that when no city is named it uses the approximate location shared by the assistant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds in-person clinic/recovery partners for a user-named city or approximate location, and distinguishes the resource from symptoms, diagnosis, treatment, and booking. It does not explicitly name a sibling tool alternative, so it is clear but lacks the explicit sibling differentiation that would warrant a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a strong when-to-use condition: the user wants to be seen in person by a physical therapist, sports medicine clinic, chiropractor, sports massage therapist, or recovery studio. It also includes boundaries such as 'never symptoms', no diagnosis/treatment, no prices, and no booking, but it does not name the alternative sibling tools to use for those excluded actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_coaching_brainFind a Phorme coaching brainA
Read-only
Inspect

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, or has a coach code someone gave them, for example K7Q2-XR4D. 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; with a code, the one brain it belongs to and its page. It reads only and changes nothing. Do not use it for injury rehab or nutrition.

NameRequiredDescriptionDefault
codeNoA Phorme coach code exactly as the user gave it, for example "K7Q2-XR4D", or a phor.me/c/ link. Only when they gave one.
goalNoWhat the user wants from training, in their words, for example "jump higher" or "first HYROX race". Needed unless a code is given.
coachNoA coach the user named, for example "Cameron Goodson". Only that coach's brains are returned.
sportNoThe sport or position, only if the user named one.
days_per_weekNoTraining days a week, only if the user said.

Output Schema

NameRequiredDescription
codeNoThe coach code that was looked up, when one was given.
goalYes
brainsYesBest fit first: id, name, coach, coach_title, focus, how_it_trains, image_url and image_alt (Phorme's own picture of the brain, its programme cover or its coach's room: show it, never a web photo), programmes (name, summary, weeks, days_per_week, image_url) and why it fits.
limitsYesWhat this does not cover. Tell the user.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces with 'reads only and changes nothing'. Beyond that it discloses return cardinality and ordering ('up to three brains that fit, best first'), the fields returned, and that a code narrows to exactly one brain plus its page. It doesn't cover the zero-result case, which would fully close the loop.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the triggering condition and examples before the definition, then behavior, then exclusions. Dense but every sentence carries routing or behavioral information; the definition sentence is slightly long but earns its place by disambiguating 'brain'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five optional parameters, rich annotations and an output schema, the description covers usage modes, return shape and scope exclusions, so an agent can call it correctly. The only gap is behavior on no-match results, a minor omission given the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema alone earns a baseline 3. The description adds genuine conditional semantics the schema cannot express: goal is 'needed unless a code is given', coach filters to that coach only, and sport/days_per_week should only be supplied if the user said so, which constrains opportunistic parameter filling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (Phorme coaching brain), then defines the resource concretely as 'a coach, the principles the method trains by, and a coach-built programme'. Concrete example utterances and the sibling-ish alternatives (named coach, coach code) make it distinguishable from search_phorme_programs and find_personal_coach.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use triggers with user-voice examples, plus three mode variants (goal, named coach, code). It also states when NOT to use it: 'Do not use it for injury rehab or nutrition', and implies the pre-condition that the user hasn't picked a programme yet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_exercise_swapFind an exercise swapA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
reasonNoWhy they need a swap, only if they said.
exerciseYesThe exercise to replace, as the user wrote it, for example "Seated cable row".
available_equipmentYesEquipment the user has, for example ["dumbbells", "bench"] or ["none"]. Ask when the user did not say.

Output Schema

NameRequiredDescription
matchYesnearest_kind: nothing of the same kind fits the equipment, so these work the same muscles from a different angle.
swapsYesReplacements, best first, each with name, equipment and demo_url.
limitsYesWhat the swaps do not cover. Tell the user.
matchedNoThe Phorme library movement the exercise matched.
patternNoThe kind of movement, for example horizontal_pull.
exerciseYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, destructiveHint false, openWorld false), yet the description adds real behavioral detail: it returns at most five library movements, each with a demo link, and it discloses the fallback behavior of offering the nearest kind when no exact match exists. The read-only claim is also scoped concretely ('changes nothing, including any saved plan').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the usage trigger, then return behavior, then the safety and exclusion clauses. No sentence is redundant and the most decision-relevant content (when to call, when not to) comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description still summarizes the return shape (up to five movements, demo links, nearest-kind fallback), and covers triggers, safety, and the injury exclusion. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters, including the 'as the user wrote it' phrasing and the ["none"] equipment example. The description reinforces how available_equipment drives the result set but adds no syntax, format, or handling detail beyond the schema, and never mentions the 'reason' enum. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('find a replacement for one exercise') plus the three concrete triggers (no equipment, station taken, wants a different option). This is unmistakably distinct from every sibling (get_*, save_*, preview_*, search_*), none of which substitutes an exercise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use conditions are given with a worked example ('no cable machine for cable rows'), and an explicit when-not is provided ('Do not use it to work around pain or injury'). No sibling tool offers an alternative path here, so the absence of a named alternative is not a gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_gym_classFind a Phorme gym or classA
Read-only
Inspect

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, when no city is named, within 60 km (or radius_km) of the approximate location the assistant shares, 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.

NameRequiredDescriptionDefault
cityNoThe city the user named, for example "Austin".
daysNoHow many days ahead to look. Default 7.
radius_kmNoHow far to look, in km. Default 60. Use a larger one only when the user said they would travel.
class_typeNoThe kind of class, only if the user said, for example "barbell" or "yoga".

Output Schema

NameRequiredDescription
limitsYesWhat this does not cover. Tell the user.
placesYesGyms, studios and other places to train, nearest or best matching first: place_id, name, kind, line, city, country, distance_km, page_url and classes (class_id, the id book_gym_class takes, then title, line, starts, minutes, spots_left, book_url).
alternativesNoWhen nothing matched or no class is scheduled: kind (wider_radius, other_cities, home_plan), line (what to offer), tool, and for wider_radius the nearest places further out. Offer them; never leave the user with nothing.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already covering the read-only safety profile, the description adds substantial behaviour: a cap of five results, nearest-or-best-match ordering, the per-result payload (page link, class id, local start time, length, places left, booking link), the no-match fallback to further-out places plus a coaching-brain home plan, and the explicit note that no prices are shown. These are traits an agent could not infer from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly with the trigger sentence before the return-value detail, and no filler. It is one long run-on paragraph however, and the return-format middle clause could be split for easier scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter, zero-required search tool with an output schema, this covers everything an agent needs: when to call it, how location resolution works, result ordering and count, what each result contains, and what happens on empty results. Return-value detail is redundant with the output schema but harmless.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: city being optional and falling back to a 60 km (or radius_km) search around a shared location, and that it looks at classes "in the coming days" matching the days parameter. Only class_type and the exact days default are left to the schema, so it improves on baseline without being exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (find gyms, studios and classes to train at in person) and immediately scopes it to the in-person training case with concrete example queries. An agent can distinguish this from find_clinic, find_personal_coach, find_races or book_gym_class without inspecting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ("Use this when the user wants a gym, studio or class to train at in person") that matches sibling tools' territory. It also draws the boundary against the booking flow ("booking a class for a signed-in user is a separate step"), routing that need to book_gym_class, and explains the fallback when no city is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_personal_coachFind a personal coachA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
goalNoWhat the user wants coaching for, in their words, only if they said.
sportNoTheir sport, only if they named one.

Output Schema

NameRequiredDescription
limitsYesWhat this does not cover. Tell the user.
coachesYesEach coach taking 1:1 clients: coach, coach_url, offer, summary, includes, spots (status, detail, open), page_url, how_it_starts, and free_review (open, page_url) when the coach has a free plan review spot this week.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, destructive=false and openWorld=false, so the safety profile is covered; the description adds genuinely new context by stating the tool shows no prices, books nothing and changes nothing, and that coaching is training not medical care. It stops short of describing limits like result caps or ranking, which is minor given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is one long run-on sentence, but it is front-loaded with the trigger and every clause (what it returns, what it does not do, scope disclaimer) carries information. Slightly dense but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the return-value enumeration is partly redundant, yet the description supplies the non-obvious domain boundaries (no prices, no booking, not medical care) that structured fields cannot express. Sufficient for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with only two optional params, so the schema already carries the semantics; the description only indirectly illustrates them via the example utterances. Baseline 3 is appropriate since no additional syntax or format detail is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('find' + 'personal/human coach') and immediately scopes it as 1:1, program-writing, weekly-check-in coaching, which distinguishes it from siblings like find_coaching_brain or find_clinic without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Trigger conditions are explicit and illustrated with realistic user phrasings ('I want a real coach for basketball', 'can someone coach me one on one?'). It gives no negative guidance naming an alternative tool (e.g. when to use find_coaching_brain instead), so it falls short of a full when/when-not/alternatives treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_racesFind a raceA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
kindNoThe kind of race, for example "70.3", "triathlon", "marathon", "half marathon" or "HYROX". Leave out for any.
whereNoA country, city or region, for example "Colombia", "Barranquilla" or "South America". Leave out for anywhere.
to_monthNoLast month, YYYY-MM, only if the user gave a window.
from_monthNoFirst month, YYYY-MM, only if the user gave a window.

Output Schema

NameRequiredDescription
racesYesRaces by date: name, city, country, on (YYYY-MM-DD or null), url (the race's own page), registration (status open, sold_out, opening_soon or closed, its url and checked_on, or null), has_plan, and logistics (the race's own venue, packet pickup, airport, official hotels and guide links as the organiser listed them, with source_url and checked_on; null when not given).
limitsYesWhere the dates come from and what to check. Tell the user.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description reinforces with 'It reads only and changes nothing.' It adds genuinely non-obvious context: data provenance ('verified race listings'), a freshness caveat ('as the organiser last showed it'), and a coverage limit ('Only races in Phorme's listings are returned').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger sentence and efficiently sized overall. The middle sentence is long and enumerates returned fields (city, date, page, registration, plan, logistics) that an output schema already carries, which is minor redundancy but not damaging.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it still covers search scope, data source, freshness and the boundary that only Phorme-listed races are returned. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents kind, where, from_month and to_month with examples, patterns and 'leave out for any/anywhere' semantics. The description mainly restates this and adds only a mild nuance about months being filtered 'by date only', so it stays at the high-coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (lists/finds races) and resource (Phorme's verified race listings), and scopes exactly what it filters on: kind of race, place, and months. It is clearly distinct from siblings like plan_for_race or find_clinic, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ('Use this when the user is looking for a race to enter') backed by three concrete user-style examples that map to the parameters. It gives strong positive guidance but never states when-not to use it or names a sibling (e.g., plan_for_race) as the alternative once a race is chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gym_reportGet my gym reportA
Read-only
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
nextYesWhat to tell the owner next.
claimsNoThe account's open claims on places nobody ran: claim_id, place_id, place_name, status (code_sent or review), channel, sent_to (masked), expires_at.
placesYesEach place the account lists, as create_or_claim_place returns it.
reportYesOne per place. tier free: views_30d, times_shown_30d, ai_check, missed (bookings, asked, members), asks_held, locked and plan_url. tier plan: times_shown, visits, assistant_reads_30d, clicks, bookings, requests, asks_held, members, share_earned_cents, ai_check, asked and funnel.
console_urlYes
visits_unavailableNoTrue when page visits could not be read just now.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, it discloses a real auth prerequisite ('needs a connected Phorme account') and a data-gating behavior: free listings return only a little reach and what was missed, with the rest locked like the web console. That tier behavior materially affects how an agent should interpret results. The 'reads only and changes nothing' line is largely redundant with readOnlyHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The trigger condition is front-loaded, followed by return contents and then the free-tier caveat and auth note. It is a bit dense in the middle where it enumerates many metrics, but every clause carries information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema already exists, yet the description still conveys the access-gating and auth requirements an agent needs to set expectations. Combined with the annotations, nothing essential is missing for a zero-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate — baseline 4 applies. The description correctly indicates the report is implicitly scoped to the connected account rather than requiring any argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource — it returns each place the connected account lists, with page, status, and a report of metrics. It also scopes the audience ('gym, studio or clinic owner... their own places on Phorme'), which separates it from the coaching-oriented sibling get_my_coaching_business.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger conditions and two example user utterances ('how is my gym doing on Phorme?', 'did anyone book this week?'), making the use case easy to match. It stops short of naming a specific alternative tool or stating when not to use it, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lift_progressChart my lift progressA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
monthsNoHow many months back to look. Defaults to 6.
movementYesThe lift as the user said it, for example "bench", "back squat" or "RDL".

Output Schema

NameRequiredDescription
bestNo
foundYes
changeNofrom_e1rm_lb, to_e1rm_lb, change_lb and change_pct over the period.
pointsNoOldest first: on, top_set, e1rm_lb, volume_lb, sets.
movementNoThe logged lift that matched, or null.
also_matchedNoOther logged lifts the words also matched.
logged_movementsNoWhen nothing matched: the lifts they log most.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful context beyond annotations: it needs a connected Phorme account, weights are in pounds, it emits a chart card, and it lists logged lifts on no match. Does not discuss rate limits or pagination, but coverage is strong for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph, front-loaded with the trigger condition. Every sentence carries information; minor density but no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't detail return values, and it still gives account prerequisite, unit system, chart card behavior, and empty-match fallback. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters including the months default. The description reinforces the movement matching behavior (finds by the words the user uses) but does not add syntax or format beyond the schema. Baseline 3 is right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (chart/find) and resource (lift progress) and distinguishes itself from siblings like get_training_history and get_planned_sessions by returning per-session data points plus a chart. The description makes clear what it returns (one point per session with best set, estimated max, volume) so an agent can pick it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit user-phrasing triggers ("how is my bench going", "chart my squat over six months") and the condition for the no-match fallback. Practical routing guidance beyond mere purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_brain_codeGet my coaching brain codeA
Idempotent
Inspect

Use this when a Phorme coach asks for the code or link to share one of their coaching brains, for example "what is my coach code?". Each brain has one code, like K7Q2-XR4D, made the first time it is asked for and kept as the brain changes. Anyone who types it in the Phorme app or opens its link starts with that brain. It needs a connected Phorme account that owns the brain.

NameRequiredDescriptionDefault
brain_idYesThe brain id from the coach's brains.

Output Schema

NameRequiredDescription
urlYes
codeYes
brain_idNo
console_urlNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Explains a non-obvious behavior that the annotations alone only hint at: the code is lazily generated on first request and then persists as the brain changes, which justifies readOnlyHint=false and idempotentHint=true. It also discloses the authorization prerequisite (a connected Phorme account that owns the brain) and what the code does downstream (grants a starting copy of that brain).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition ("Use this when..."), followed by mechanism, effect, and prerequisite in four tight sentences. Nothing is redundant, though the clause about the code being made on first request and kept is slightly clunky in phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with an output schema, the description covers the trigger, the side effect of first-use generation, the auth requirement, and the real-world consequence of sharing the code. An agent has everything needed to call it correctly without further inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single brain_id parameter is fully documented, so the schema carries the load. The description only implies that brain_id selects among the coach's brains ("one of their coaching brains") without adding format or sourcing detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieve the shareable code/link for one of the coach's own coaching brains, with a concrete example code format (K7Q2-XR4D). It is distinguishable from siblings like find_coaching_brain (search) and copy_coach_from_code (import), though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger with a quoted user utterance ("what is my coach code?"), which makes the intended invocation context unmistakable. It stops short of stating when not to use it or which sibling to pick instead (e.g., copy_coach_from_code for someone else's code).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_coaching_businessGet my coaching brainsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
coachNoWhether the account has an active coach plan.
brainsYesEach brain with status, member totals, quiet members (labels only), earnings in cents and whether a note may go today.
console_urlYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds value beyond annotations: 'reads only and changes nothing' reinforces readOnlyHint, and it discloses the account prerequisite plus the specific fallback behavior ('an account without a coaching brain gets the address of the coach console'). It doesn't mention rate limits or output format, but the output schema covers returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, each earning its place: first the trigger and scope, then the safety and account requirements. Front-loaded with the use case.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param read tool with an output schema, it covers the trigger, safety profile, account precondition, and fallback behavior. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline is 4. The description correctly implies no inputs are needed and focuses on what the call returns and its account prerequisites.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get my coaching brains') and enumerates what it returns: member counts, who went quiet, earnings, and note-sendability. This distinguishes it from siblings like find_coaching_brain (search) and send_note_to_my_members (write).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with 'Use this when a Phorme coach asks about their own coaching brains', clearly framing the trigger condition. It doesn't explicitly name alternatives like find_coaching_brain, but the 'own' framing and read-only nature differentiate it adequately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_payoutsGet my payoutsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
nextYes
balanceNoearned_cents, paid_cents, going_out_cents, available_cents, min_payout_cents and payouts_ready. Null when it is read in the console.
payoutsYespayout_id, amount_cents, status (pending, paid or failed) and created_at, newest first.
console_urlYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered; 'It reads only and changes nothing' largely restates that. The description does add non-annotation context: the auth requirement ('needs a connected Phorme account') and the shape of the returned ledger (earned, paid out, going out, owed now, bank setup, recent payouts).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the trigger scenario, then returns, then safety, then prerequisite; each sentence is short and readable. It loses a point for mild redundancy, since 'reads only and changes nothing' duplicates the readOnlyHint/destructiveHint annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no inputs and an output schema present, the description only needs the trigger, the read-only nature and the account prerequisite, and it supplies all three. Return-field detail is covered by the output schema, so no agent-facing gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters (empty object schema, additionalProperties=false), so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter meaning is missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource+scope ('what Phorme paid them', earned/paid/owed ledger for the account) and anchors it with a concrete user utterance ('what did Phorme pay my gym?'), which separates it from the reporting sibling get_gym_report and the link-generating get_payout_setup_link. An agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use this when an owner asks what Phorme paid them, or what goes out next') plus the prerequisite of a connected Phorme account. It does not name a specific alternative to use instead, e.g. get_gym_report or get_payout_setup_link, so exclusion guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_phorme_programGet a Phorme programA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
program_idYesThe program id returned by search_phorme_programs.

Output Schema

NameRequiredDescription
idYes
titleYes
accessYes
info_urlYesA page that describes the program. It has nothing to buy on it.
first_weekYesEvery session of the first week with its exercises and demo links.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds domain-specific guarantees beyond that ('shows no prices and starts no purchase') and lists what is returned, which is genuinely useful value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the usage condition, then the return contents, then the behavioral guarantee. No filler and no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return details need not be exhaustively specified, yet the description still summarizes them. For a single-parameter read tool with full annotation coverage, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and there is one required parameter whose schema text already explains its origin ('The program id returned by search_phorme_programs'). The description adds no further syntax or format detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (returns/reveals) and resource (a single Phorme program), and the clause 'when the user picked one Phorme program' sets it apart from the browsing sibling search_phorme_programs. An agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening clause gives explicit when-to-use context ('when the user picked one Phorme program and wants its details'), and the parameter notes the id comes from search_phorme_programs. It stops short of explicitly naming when NOT to use it or spelling out the alternative as a routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_planned_sessionsGet my planned Phorme sessionsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
daysNoHow many days ahead, starting today. Defaults to 7.

Output Schema

NameRequiredDescription
planNoThe name of the plan they follow.
foundYes
sessionsNoIn date order: on, title, status, minutes and exercises with sets, target, load and note.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, so 'reads only and changes nothing' is partly redundant. However, the description adds genuinely useful context the annotations do not carry: the connected-account prerequisite and the pounds unit for weights.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger and example, then the return contents and constraints. Four sentences with little waste, though the read-only statement partly overlaps the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained. The description covers the auth requirement, unit system, and safety profile, leaving little for an agent to guess, though it does not describe how sessions are ordered or scoped.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single 'days' parameter is already fully documented with its default and range. The description's mention of 'today or the coming days' adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get planned sessions) with a concrete example ('what is my workout today'). It is clearly distinguishable from siblings like get_training_history (past) and get_saved_training.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames when to use it ('when the user asks what their Phorme plan has for today or the coming days') with a sample query. It implies but does not name an alternative for historical data, so it stops short of the when-not/alternatives tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_saved_trainingGet saved Phorme trainingA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
training_idYesThe training_id returned by save_workout_to_phorme or save_program_to_phorme.
training_kindYesWhether the saved item is a workout or a program.

Output Schema

NameRequiredDescription
titleYes
statusYes
open_urlYesLink that opens the saved training in Phorme.
training_idYes
training_kindYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the read-only profile is largely free. The description still adds useful context beyond them: the result is scoped to training 'owned by the connected Phorme account' and the operation 'changes nothing', which tells the agent about account scoping and side-effect freedom. It stops short of disclosing failure modes (e.g. what happens if the id belongs to another account or was never saved).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each doing distinct work: trigger, return payload, required input, and negative scope. The usage condition is front-loaded and there is no filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety, a fully described 2-parameter schema, and an output schema that carries return detail, the description fills every remaining gap: when to call it, what it is scoped to, and what it refuses to do. An agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are already documented, including the provenance of training_id from the save tools and the workout/program enum. The description only restates that training_id is 'from that save', adding no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('get... training already saved to Phorme') and pins the return payload ('title and open link'), which separates it from save_workout_to_phorme, save_program_to_phorme, and search_phorme_programs. The closing sentence explicitly disclaims the neighbouring behaviours (list, search, edit, delete), so an agent can route correctly without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('when the user asks about a workout or program already saved to Phorme in this conversation, for example to get its Phorme link again') and an explicit set of exclusions in the same breath. Nothing about when-not-to-use is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_training_historyGet my Phorme training logA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNoHow many recent workouts to return, newest first. Defaults to 10.

Output Schema

NameRequiredDescription
foundYesFalse when this account has no Phorme training yet.
recordsNoLatest personal records: movement, label, value and date.
workoutsNoNewest first: date, title, minutes and exercises with sets, best_set, e1rm_lb and volume_lb.
last_7_daysNo
last_30_daysNo
total_loggedNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered and 'it reads only and changes nothing' is largely redundant. The description does add non-annotation context: a connected Phorme account is required, and weights are returned in pounds. That is meaningful added behavior for a data-returning tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, then what it returns, then constraints, then units – a sensible ordering with no wasted framing. Two clauses are redundant against structured data ('it reads only and changes nothing' vs. readOnlyHint; the full return enumeration vs. the existing output schema), which keeps it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param read tool with an output schema, the agent has everything it needs: when to invoke it, what data domain it covers, the account prerequisite, and the unit convention. Return-shape detail is arguably unnecessary given the output schema, but its presence costs nothing and nothing required is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single optional 'limit' parameter and schema description coverage is 100%, so the schema already fully documents count semantics, default of 10, and the 1-20 range. The description only implies newest-first ordering via 'most recent logged workouts' and adds no syntax or formatting detail beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource (their own logged training in Phorme) and enumerates exactly what comes back: recent workouts with sets, best set, estimated max, volume, 7/30-day workout counts, and latest records. That level of detail makes it distinguishable from siblings like get_lift_progress (trend analysis), get_planned_sessions (future sessions), and get_saved_training (saved items) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger phrases – 'what they did last time', 'how often they trained', 'personal records', 'a next workout built on their recent sessions' – and scopes usage to the user's own data. It stops short of naming alternatives or stating when NOT to use it (e.g., for progress trends use get_lift_progress, for upcoming sessions use get_planned_sessions), so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_held_requestsList asks waiting for my gymA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
place_idNoOnly this place. Leave out for all of the owner's places.

Output Schema

NameRequiredDescription
heldYeshold_id, place_id, place_name, kind (class or session), class (title, starts), first_name, note, times, asked_at, expires_at, can_accept and plan_url (the plan on phor.me, a price-free link, when it cannot be accepted yet).
nextYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/non-destructive/open-world=false, so safety is covered; the description adds real domain behavior beyond that: the 7-day hold for class bookings and 1:1 requests at non-gym-plan places, expiry timing, accept-now eligibility, and the auth prerequisite (connected Phorme account that owns the place).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use-case trigger in the first sentence, followed by policy, payload, safety, and auth in a compact block. Every sentence carries information, though the return-field enumeration is somewhat list-heavy given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not detail return values, and it still supplies the business rule (7-day hold), auth requirement, and safety profile an agent needs. The only gap is that it never echoes the place_id default behavior, which the schema already covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% on the single place_id parameter and its 'leave out for all places' semantics, so the baseline is 3. The description alludes to 'the place' and non-gym-plan places but adds no parameter-level syntax or default information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource in owner-facing terms ('list asks waiting for my gym' / 'who wants to book or visit their place'), so an agent can tell it is the read-side counterpart to answer_held_request. The example query (

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition (an owner asks who wants to book or visit) plus a natural-language example phrasing. It does not name the sibling action tool (answer_held_request) or state an exclusion, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_for_racePlan training for a raceA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
raceYesThe race as the user named it, for example "IRONMAN 70.3 Barranquilla".

Output Schema

NameRequiredDescription
raceYesThe race as listed: name, city, country, on (YYYY-MM-DD, null when not yet published), url (the race's own page), registration, and logistics: the race's own venue, packet_pickup, airport, getting_there, hotels (up to 6 official hotels, each name, url and note), course_url, athlete_guide_url, source_url and checked_on, as the organiser listed them, or null.
brainNoThe Phorme coaching brain the plan follows: name, coach and how_it_trains.
limitsYesWhat this plan does not cover and where its dates come from. Tell the user.
programNoThe plan: title, weeks and days_per_week, and its summary.
days_outNo
sessionsYesThe sessions of that week, each with a title and exercises.
starts_onNoWhen the race is further off than the plan, the day the plan's first week starts.
weeks_outNo
week_numberNoThe week of the plan these sessions are.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/destructiveHint=false and openWorldHint=false, and the description reinforces that ('reads only and changes nothing'), but it also adds genuinely non-structural behavior: it discloses refusal semantics ('If the race is not listed it says so; never guess a race date') and the provenance of race logistics (page and date they were read). The one gap is that most of the returned-content detail duplicates the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical usage trigger is correctly front-loaded, but the single ~200-word paragraph for a one-parameter tool carries redundancy: the enumeration of sets/reps/paces/coach-notes/demo-link return values overlaps the output schema, and 'reads only and changes nothing' repeats the readOnlyHint annotation. Several sentences could be trimmed without losing callable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single string parameter, full annotation coverage and an output schema, the description supplies everything else an agent needs: the trigger, the triathlon-vs-single-sport scope (swim/bike/run in one plan for IRONMAN 70.3/5150/full), the not-listed failure path, and what data comes back inclusive of race logistics provenance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single required parameter and 100% schema description coverage, the baseline is 3, but the description adds real semantics by showing three colloquial, possibly fuzzy namings ('IRONMAN 70.3 Barranquilla', 'I signed up for the half ironman in Cartagena', 'Chicago Marathon'), telling the agent that free-form user phrasing is expected and resolved against the listings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action chain (find the race in Phorme's listings, count weeks to race day, return the matching plan week) rather than restating the title. An agent can distinguish it from siblings like find_races or get_phorme_program without opening any schema, because it states it produces a training plan keyed to a race date.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear trigger condition (the user names a race they are training for) with three concrete utterance examples, plus explicit exclusions ('Do not use it for injury rehab or nutrition'). It stops short of naming which sibling to use instead for those excluded cases, so it is clear context rather than full when/when-not/alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_program_importPreview program in PhormeAInspect

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.

NameRequiredDescriptionDefault
programYesThe multiweek program to preview, taken from this conversation. At most 500 workouts in total.

Output Schema

NameRequiredDescription
titleYes
warningsYesItems the user should review before saving.
exercisesNoEach exercise with its Phorme library match and demo link.
expires_atYesWhen the preview can no longer be saved, as an ISO 8601 time.
preview_idYesIdentifies this preview when it is saved.
training_kindYes
warning_countYes
exercise_countYes
requires_confirmationYesAlways true: saving needs the user's confirmation.
estimated_duration_minutesYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false and destructiveHint=false, which leaves the write semantics ambiguous. The description resolves this: it stores a private 24-hour preview, does not persist to any account, and performs exercise-library matching — exactly the behavioral traits an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each load-bearing: trigger, mechanics, persistence guarantee, exclusions. The most decision-relevant information (what it does and what it does not save) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. For a complex nested-input tool with annotations covering only safety hints, the description supplies the missing lifecycle, persistence, and routing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with one deeply nested, well-annotated parameter, so the schema already carries the parameter burden. The description adds only the provenance constraint that the program comes from the current conversation; no field-level meaning is added. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (preview) and resource (a multiweek training program from this conversation) and describes the concrete steps taken: checking every week and workout, matching exercises to the Phorme movement library. It explicitly excludes single workouts, cleanly separating it from the sibling preview_workout_import.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ("Use this when the user wants to turn a multiweek training program... into trackable Phorme training") and closes with explicit exclusions ("Do not use it for a single workout, nutrition plans or medical questions"). The alternative for the single-workout case is named by implication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_sport_weekPlan a sport training weekA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
sportYesThe sport or position, for example "basketball", "volleyball" or "wide receiver".
season_phaseNoWhere the user is in their season, only if they said.
gym_days_per_weekYesGym days the user has this week. Ask when the user did not say.

Output Schema

NameRequiredDescription
brainNoThe coaching brain whose method the week follows: name, coach, focus, how_it_trains and image_url (Phorme's own picture). Name it to the user.
sportYes
limitsYesWhat this week does not cover. Tell the user.
programYesThe coach-built program the week comes from.
sessionsYesOne entry per gym day, each with a title and exercises.
week_numberNo
match_qualityYesexact_sport: a program written for this sport. related: the closest program. none: a general athletic program.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds a selection heuristic (closest coach-built program) and a fallback behavior (match_quality and limits when no program exists). This goes beyond the annotations, though the 'reads only and changes nothing' statement is largely redundant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each serving a distinct purpose: usage trigger, behavior, safety, and exclusions. Front-loaded with the primary use case and no wasted language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers usage, exclusions, and a failure mode, while annotations handle safety and an output schema covers return structure. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents sport, season_phase, and gym_days_per_week. The description adds no parameter-level syntax or constraints beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific action (plan a sport training week) and resource (one week of gym sessions built from a Phorme sport program), and the 'use this when' clause distinguishes it from race planning and generic program retrieval siblings. The concrete basketball example makes the intent unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear when-to-use clause and explicit exclusions (injury rehab, children's team practice plans, nutrition). However, it does not name an alternative sibling tool to use instead in the excluded cases, so it falls short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_workout_importPreview workout in PhormeAInspect

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.

NameRequiredDescriptionDefault
originNoUse "sport_week" when the workout is a session returned by preview_sport_week. Otherwise leave out.
workoutYesThe workout to preview, taken from this conversation.
time_limit_minutesNoMinutes the user said they have. Leave out when the user did not say.
available_equipmentNoEquipment the user said they have, for example ["dumbbells", "bench"] or ["none"]. Leave out when the user did not say.

Output Schema

NameRequiredDescription
titleYes
warningsYesItems the user should review before saving.
exercisesNoEach exercise with its Phorme library match and demo link.
expires_atYesWhen the preview can no longer be saved, as an ISO 8601 time.
preview_idYesIdentifies this preview when it is saved.
training_kindYes
warning_countYes
exercise_countYes
requires_confirmationYesAlways true: saving needs the user's confirmation.
estimated_duration_minutesYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false/destructiveHint=false/openWorldHint=false but say nothing about persistence. The description fills that gap: the preview is stored privately for 24 hours and no training is saved to any account, which resolves whether the write is durable. It stops short of stating auth requirements or what happens on expiry, so it lands just under a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the selection trigger before the behavior list and the exclusions. The middle sentence is dense with comma-separated clauses but each clause carries distinct operational information, so nothing reads as filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, a nested workout object, and an output schema (so return values need no prose), the description covers scope, transformations performed, storage lifetime, persistence boundary, and exclusions. An agent has everything needed to decide and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description goes further by explaining the effect of the optional inputs: it checks for equipment the user did not list and for workouts running past their stated time, which clarifies why time_limit_minutes and available_equipment exist rather than just what they accept.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('preview a single workout in Phorme') and enumerates the concrete work performed: validates the workout, maps exercises to the Phorme movement library with demo links, flags equipment/time conflicts, and stores a private 24-hour preview. This is clearly distinguishable from siblings like save_workout_to_phorme, preview_program_import, and preview_sport_week.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use triggers (workout written in conversation, pasted from notes, or built to fit time/equipment) and explicit when-not conditions ('Do not use it for multiweek programs, nutrition plans, or pain and injury questions'). The exclusions route the agent away from this tool for adjacent requests, which is exactly what selection guidance should do.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_gym_brainPublish my gym's coaching brainA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
confirmationYesSet to true only after the owner said yes to publishing the coaching brain.

Output Schema

NameRequiredDescription
nextYes
checksNolabel, ok and detail for each publish check.
brain_idYes
place_idYes
publishedYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: it requires explicit owner confirmation, reuses the same publish checks as the console, and describes the failure path ('when one fails it says what is left and members see no change') — i.e. partial publishes do not leak to members. That matches the idempotentHint=true / destructiveHint=false annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences ordered by importance: trigger, the confirmation gate, publish behavior/failure semantics, then the account prerequisite. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. Everything an agent needs to call this correctly — when to invoke, the mandatory confirmation workflow, what happens on check failure, and the account prerequisite — is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented; the baseline would be 3. The description adds real operational meaning on top: it explains that 'confirmation' must reflect a human yes ('Confirm with the owner first, and set confirmation to true only after they said yes'), which the const:true schema alone cannot convey, and ties place_id to the owner's places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (publishes) and resource (the place's coaching brain) plus the observable outcome: changes reach members. The granularity — a brain belonging to a specific place — distinguishes it from nearby siblings like publish_place, update_gym_brain and start_gym_brain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete trigger ('when an owner wants the changes to their place's coaching brain to reach members, for example after its voice, look or programs changed') and a prerequisite (a connected Phorme account that owns the place). It does not explicitly say when not to publish or name an alternative tool, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_placePut my place liveA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
confirmationYesSet to true only after the owner said yes to putting this place live.
request_emailNoWhere booking confirmations and requests are emailed. Never shown in public.

Output Schema

NameRequiredDescription
nextYes
placeYesThe place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, yet the description adds substantial context the annotations cannot: listing is free, it takes no payment, starts no plan, non-gym-plan booking asks are held 7 days, and a connected Phorme account owning the place is required. This is exactly the kind of side-effect and prerequisite detail an agent needs before a mutating call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and confirmation requirement are front-loaded, and most clauses (cost, plan, hold window, prerequisites) carry real information. It is dense and slightly run-on in the back half, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained; the description covers the remaining gaps – cost, auth/account prerequisites, side effects on requests, and confirmation gating – leaving nothing an agent needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: it defines the email precedence chain (request_email, else the place's own, else the account's) and reinforces the confirmation semantics. The fallback logic is genuinely additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+scope: putting a place live across phor.me, the app map, and the Phorme connector. This clearly separates it from siblings like unpublish_place, update_place, and create_or_claim_place without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the trigger ('when an owner wants their place live') and a firm prerequisite ('Confirm with the owner first, and set confirmation to true only after they said yes'). It does not explicitly name an alternative tool (e.g. unpublish_place or update_place) or when NOT to use it, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_training_importShow Phorme training cardA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
titleNoTraining title from the tool result.
statusNo"preview" for training not yet saved, "saved" for training saved to Phorme.
open_urlNoLink that opens the saved training in Phorme. Not set for previews.
training_kindNo
warning_countNo
exercise_countNo
estimated_duration_minutesNo

Output Schema

NameRequiredDescription
titleNoTraining title from the tool result.
statusNo"preview" for training not yet saved, "saved" for training saved to Phorme.
open_urlNoLink that opens the saved training in Phorme. Not set for previews.
training_kindNo
warning_countNo
exercise_countNo
estimated_duration_minutesNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, and the description is consistent with them ('reads and changes nothing in Phorme'). It goes beyond the annotations by disclosing that the tool is purely presentational — 'displays only the title, counts, status and link it is given' — telling the agent it does no fetching or enrichment, which is the key behavioral fact here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the primary purpose front-loaded and the behavioral caveat last. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a pure renderer with an output schema present, the description need not explain return values, and it correctly focuses on input expectations and the no-side-effects guarantee. The remaining gap is the four schema parameters with no description anywhere, which leaves an agent guessing at what counts/kind mean.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 43%, with training_kind, warning_count, exercise_count and estimated_duration_minutes undocumented in the schema. The description partly compensates by naming what is rendered (title, counts, status, link), which maps onto those fields, but it adds no format or unit meaning for the undocumented ones. Baseline 3 for partial coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'show a compact Phorme card for a workout or program.' The phrase 'that was just previewed or saved' scopes it to post-preview/post-save results, which separates it from preview_workout_import and save_workout_to_phorme without naming them. It is clear what the tool produces, though it never names the siblings it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this to show a compact Phorme card for a workout or program that was just previewed or saved' gives a clear triggering condition tied to the preview/save flow. It does not spell out alternatives or a when-not case, but the temporal condition is enough for an agent to place it correctly in a sequence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_program_to_my_coaching_brainSave a program to my coaching brainAInspect

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.

NameRequiredDescriptionDefault
titleYes
weeksNoHow many weeks the program runs. Defaults to 4.
brain_idYesThe brain id from the coach's brains.
sessionsYesOne week of sessions; the app repeats and progresses it.
confirmationYesTrue only after the coach confirmed this save.

Output Schema

NameRequiredDescription
draftNo
savedYes
console_urlYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare it is a non-destructive write; the description goes further by disclosing that the result is a draft, that members see nothing until the coach adds it in the coach console, and that a connected Phorme account owning the brain is required. These are exactly the behavioral traits annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: the trigger condition comes first, then the write semantics, then the account prerequisite. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and the description covers the trigger, the resulting state, visibility, and the auth prerequisite. An agent has everything needed to decide and call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so most parameters (weeks, brain_id, sessions, reps, rest, seconds, confirmation) are already documented in the schema. The description only restates the kind of content saved and adds no format or constraint detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('saves the program as a draft on that brain') plus the content captured (session names, exercises, sets and reps). It is clearly separable from the adjacent save_program_to_phorme sibling by targeting the coach's coaching brain rather than Phorme directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition: the coach wrote a program in this conversation and clearly asked to save it to a coaching brain. It does not name save_program_to_phorme as the alternative or state when not to use this tool, so the routing between the two save tools is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_program_to_phormeSave program to PhormeA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
preview_idYesThe preview_id of the preview being saved.
confirmationYesSet to true only after the user clearly confirmed this save in the conversation.
idempotency_keyYesA unique string for this save. Reuse the same value when retrying so no second copy is created.

Output Schema

NameRequiredDescription
statusYes
open_urlYesLink that opens the saved training in Phorme.
training_idYes
training_kindYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: requires connected Phorme account with training:write permission and a membership including programs; returns a link; failure mode when membership is missing; no purchase is initiated; idempotency semantics with idempotency_key. Annotations declare idempotentHint=true, and the description explains how to achieve it. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger condition, then lists requirements, failure mode, exclusions, and idempotency. Six sentences with minimal waste, though slightly verbose for a three-parameter tool. Every sentence adds value but could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a write tool: covers preconditions, permissions, failure behavior, exclusions, and idempotency. Output schema exists, so return values need not be explained, though the description mentions returning a link. No gaps for an agent deciding whether and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds meaning: preview_id refers to the preview being saved, idempotency_key reuse prevents duplicate copies, and confirmation must only be set after clear user confirmation. Slightly above baseline due to the idempotency explanation, though it largely aligns with schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (save) and resource (program preview) with explicit scope: saves a preview to the connected Phorme account as a private program. Clearly distinguishes from sibling save_program_to_my_coaching_brain and save_workout_to_phorme by naming the destination and the source object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit precondition: 'when the user has seen a program preview and clearly said to save it.' Also states what happens if prerequisites fail ('says so and saves nothing') and an explicit exclusion ('never starts a purchase'). This covers when-to-use, failure behavior, and a boundary condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_workout_to_phormeSave workout to PhormeA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
preview_idYesThe preview_id of the preview being saved.
confirmationYesSet to true only after the user clearly confirmed this save in the conversation.
idempotency_keyYesA unique string for this save. Reuse the same value when retrying so no second copy is created.

Output Schema

NameRequiredDescription
statusYes
open_urlYesLink that opens the saved training in Phorme.
training_idYes
training_kindYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description adds substantive context: the saved workout is private, a link is returned, a connected Phorme account with training:write permission is required, and idempotent retries return the same workout rather than duplicating it. This is exactly the extra disclosure the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with the usage trigger front-loaded, then behavior, then prerequisites, then retry semantics. No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers trigger, effect, permission prerequisite, idempotency, and outcome; an output schema exists so return values need not be enumerated. Nothing needed to invoke this write tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it explains the retry semantics of idempotency_key ('reuse the same value so no second copy is created') and frames confirmation as gated on explicit user consent. It stops short of 5 since the parameters themselves are already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('saves that preview to the connected Phorme account as a private workout') and scopes it to a previously seen preview, which cleanly separates it from preview_workout_import and save_program_to_phorme. An agent can identify the correct tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user has seen a workout preview and clearly said to save it'), establishing both the precondition and the confirmation requirement. It does not name alternative siblings (e.g. preview_workout_import, save_program_to_phorme) as explicit alternatives, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_phorme_programsSearch Phorme programsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
goalNoTraining goal, for example "build strength".
sportNo
creatorNoCoach or creator name, only if the user named one.
equipmentNoEquipment the user has.
experienceNoTraining level, for example "beginner".
schedule_daysNoTraining days per week.
duration_weeksNo

Output Schema

NameRequiredDescription
limitsYes
programsYesMatching programs, best fit first, each with title, coach, weeks, sample_session and access.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish a safe read-only, closed-world profile, and the description layers on genuinely new behavior: a hard cap of five results, what each result contains (a sample session from week one plus where to find it in the app), that nothing is changed or purchased, and that ranking is by fit rather than commission. These are the kind of traits an agent could not infer from readOnlyHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The trigger condition is front-loaded and each sentence carries distinct information (trigger, result count and shape, safety/no-purchase, ranking policy). It is slightly dense at five sentences, with the pricing and commission reassurances bordering on marketing copy, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure need not be spelled out, yet the description still previews result content and cardinality. Combined with annotations covering safety and the description covering scope, limits, and ranking, an agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 71% schema description coverage, the schema already explains most parameters, and the description only glosses 'their sport or goal' and hints at creator via 'coach-built'. It adds no syntax, format, or filtering-combination guidance beyond what the schema documents, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('search Phorme programs') and gives a concrete example ('a structured volleyball program'). An agent can distinguish it from the singular fetch tool get_phorme_program and from the save_* siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening clause gives an explicit trigger: 'Use this when the user asks for an existing coach-built training program for their sport or goal.' It signals discovery-oriented intent, implicitly contrasting with get_phorme_program, but never names the alternative or states when not to use this tool, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_note_to_my_membersSend a note to my membersAInspect

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.

NameRequiredDescriptionDefault
textYesThe coach's own words, exactly as they approved them.
brain_idYes
confirmationYesTrue only after the coach confirmed this exact note.

Output Schema

NameRequiredDescription
sentYes
recipientsYes
next_allowed_atNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true) by disclosing concrete behavior: delivery as a notification and in each member's coach history, a 400-character cap, no links allowed, a rate limit of one note per brain per day, and an auth prerequisite of a connected account with an active coach plan owning the brain. These are exactly the operational facts an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with the usage precondition front-loaded, then effect/limits, then account prerequisites. Dense but every clause carries information; the most useful constraint (one per brain per day) is buried at the end of sentence two rather than surfaced earlier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers the remaining burden for a 3-parameter mutation: trigger condition, audience, side effects, content limits, rate limit, and account/ownership prerequisites. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description meaningfully supplements it: it clarifies that text is sent verbatim ("as they are"), restates the 400-character ceiling, adds the undocumented 'no links' constraint, and reinforces that confirmation means the coach explicitly approved this exact note. Only brain_id gets no semantic elaboration beyond ownership in the prerequisites.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it sends a coach's note to every member training under one of their published coaching brains. It further specifies the delivery form (notification plus coach history), which no sibling tool does, so it is unambiguously distinguishable from the save_*/get_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition: use it when a coach has written a note and clearly said to send it, and later that the account must own the brain on an active coach plan. It does not name alternative tools for related tasks (e.g. previewing or editing a note) or state when not to send, so it falls just short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_booking_noticesSet where booking notices goA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
send_toYesAn email, or a phone with its country code for texts, for example +15125550100. "" for the account's own.
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
confirmationYesSet to true only after the owner said yes to where booking notices go.

Output Schema

NameRequiredDescription
nextYes
placeYesThe place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations by disclosing that an empty send_to routes to the account's own phone/email, that the phone is never shown publicly, and that a connected Phorme account owning the place is required. These are concrete behavioral/auth facts annotations do not carry, though return/error behavior is left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case, then the parameter semantics, then the workflow and auth note. Dense but each sentence carries distinct information; slightly long, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation tool with an output schema, the description covers trigger, parameter meaning, consent workflow, privacy, and auth prerequisite. Remaining gaps (reversibility, error cases) are minor and partly covered by annotations and the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so 3 is the baseline. The description still adds value the schema does not fully capture: "one at a time" (single-recipient constraint) and the meaning of an empty send_to, plus the confirmation sequencing tied to owner consent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: setting where booking/ask notices for a place get sent. The example ("text my bookings to my phone") and the title make the intent unmistakable, and it is clearly distinct from sibling set_owner_email by scoping to booking notices rather than the owner's contact email.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger ("Use this when an owner wants booking and ask notices for a place sent somewhere else") and a required workflow ("Read it back to the owner first, and set confirmation to true only after they said yes"). It does not name alternative tools, so it stops short of full when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_class_scheduleSet my class scheduleA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
lineNoOne line on the class.
titleNoThe class name, for example "Barbell basics".
actionYes
minutesNo
capacityNoHow many people it takes.
class_idNoFor edit and cancel: the class_id from action list.
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
price_usdNoWhat one place in the class costs, as the owner set it. 0 or left out for free. Never repeat it to anyone but the owner.
starts_atNoWhen it starts: "YYYY-MM-DDTHH:MM" in the place's own time, or an ISO time with its offset.
confirmationNoSet to true only after the owner said yes to this class change.

Output Schema

NameRequiredDescription
nextYes
classNo
classesNoclass_id, title, line, starts (local), starts_at, minutes, capacity, booked, paid, status.
place_idYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and openWorldHint=true, and the description adds real value: a read-back-and-confirm protocol gated on confirmation=true, the irreversibility that a paid class cannot be cancelled, and an account-ownership prerequisite. However it does not say what happens to attendee bookings if a cancel is attempted despite the rule, or whether edits to a booked class are silently restricted to certain fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the usage trigger, then proceeds through action semantics, confirmation protocol, constraints and auth requirement, with no filler sentences. It is somewhat run-on, packing multiple rules per sentence, but every clause carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with destructive semantics, the description covers the confirmation gate, irreversibility caveats and account prerequisite, and an output schema exists so return values need not be described. Remaining gaps are edge behavior: which fields are editable on a booked class and what error a non-owner or unpaid-account caller receives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the schema documents most parameters; the description adds meaning mainly for confirmation (must be true only after the owner said yes) and action=list being non-mutating. Editing restrictions implied by 'a class people booked keeps its time, length and price' are not mapped to specific fields, leaving which of title/minutes/capacity/starts_at are locked ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (class schedule) with a clear verb set (see, add, change, cancel) and scopes it to owners editing their own place, which separates it from book_gym_class and find_gym_class. It never names a sibling explicitly, so differentiation is inferred from the owner framing rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit when-to-use trigger ('when an owner wants to...'), explains that action=list is a pure read, and gives the positive/negative conditions: a booked class keeps its time/length/price, and a class members paid for cannot be cancelled here. Payment is redirected away from this tool to Phorme's own payment page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_member_coverCover my membersA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
onYestrue to cover members, false to stop.
capNoMost members covered at this place. Default 50.
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
confirmationYesSet to true only after the owner said yes to this change to member cover.

Output Schema

NameRequiredDescription
nextYes
coverNoon, plan, cap and members covered.
place_idYes
plan_urlNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, and the description meaningfully extends them: it requires a connected Phorme account that owns the place, warns that a place not on the gym plan cannot enable it, notes the result returns plan_url, and clarifies that no payment is taken and members are approved by the place. It stops short of saying what happens to members already covered when the switch is turned off.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The when-to-use clause is front-loaded and every sentence carries information (prerequisites, consent gate, cap limit, plan_url outcome, payment disclaimer). It is somewhat run-on with several independent clauses, but nothing is redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be spelled out, and the description nonetheless flags plan_url. With annotations covering safety and idempotency, the remaining coverage of permissions, consent flow, and plan gating is solid; only the effect on already-covered members when disabling is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: it explains the cap can only be lowered and is bounded at 50, and frames confirmation as a consent gate tied to the owner's explicit yes rather than a bare boolean.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource: it turns member-cover on or off for a place and can lower the covered-member cap. No sibling tool does anything similar (the nearest, get_gym_report and create_or_claim_place, are only referenced as sources of place_id), so an agent can route to it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear trigger (an owner on the gym plan wants to pay for members' memberships in one place, or wants to stop) and a prerequisite gate ('Confirm with the owner first, and set confirmation to true only after they said yes'). It does not name an alternative tool for any overlapping case, but there is no obvious sibling alternative to point at.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_my_brain_rulesSet my coaching brain rulesA
Idempotent
Inspect

Use this when a Phorme coach describes how they coach and wants their coaching brain to follow it, for example "every session starts with mobility, main lifts stay in 3 to 6 reps, never two hard days in a row". Sent with the coach's words, it reads them into the brain's rules and saves nothing: it returns the rules, one plain line per rule, and what no rule covers yet. Sent with those rules and confirmation, it saves them, and Phorme checks the brain on sample members and says whether every plan still works. Members train by the saved rules from their next session. It needs a connected Phorme account that owns the brain; set confirmation to true only after the coach said yes to the rules as read back.

NameRequiredDescriptionDefault
textNoHow the coach coaches, in their own words from this conversation. Never invented. Sent to read a draft.
rulesNoThe rules a draft returned, unchanged or as the coach corrected them: method, voice, banned_phrases and share. Sent to save.
brain_idYesThe brain id from the coach's brains.
confirmationNoTrue only after the coach confirmed these rules. Needed to save.

Output Schema

NameRequiredDescription
nextNo
saidNoOne plain line per rule the draft read: key and line.
rulesYes
savedYesFalse for a draft, true once saved.
unreadNoParts of the coach's words no rule covers yet.
brain_idYes
preview_okNoAfter a save: whether every sample member still gets a plan that works.
console_urlNo
requires_confirmationNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say the tool is not read-only, idempotent, and non-destructive; the description adds substantial non-structured behavior: the draft call saves nothing and returns the rules plus uncovered gaps, the save call validates against sample members and reports whether plans still work, and members train by the saved rules starting next session. Auth ownership requirements and the confirmation precondition are also disclosed, which is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the triggering condition, then the two call modes, then the account prerequisite and confirmation guardrail — a sensible order with little filler. It is dense and run-on in places, but nearly every clause conveys either a mode, a side effect, or a safety rule.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, nested-object, non-idempotent-looking write tool, the description covers the trigger, both call modes, side effects, post-save verification, downstream member impact, and auth ownership. Return values are described even though an output schema exists, so nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds mode-dispatch meaning the schema cannot express: 'text' triggers the read-only draft path, 'rules' plus 'confirmation' triggers the save path, and text must come from the coach's words rather than being invented. The nested 'rules' payload (method, voice, banned_phrases, share) is only enumerated inside the schema description, not the function description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it reads a coach's own words into coaching-brain rules and can save them. The two-mode behavior (draft read-back vs. save) is spelled out, so the agent knows exactly what will happen. It never names the neighboring tools (start_my_coaching_brain, update_gym_brain, save_program_to_my_coaching_brain), so sibling differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit triggering condition with concrete examples: 'Use this when a Phorme coach describes how they coach...', and states the prerequisite (a connected Phorme account that owns the brain). It also constrains the risky path: set confirmation true only after the coach confirmed the read-back. It does not name when to prefer a different sibling tool instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_owner_emailSet my owner emailA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
emailYesThe owner's email, or "" to clear it.
confirmationYesSet to true only after the owner said yes to this email.

Output Schema

NameRequiredDescription
nextYes
owner_emailYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare mutating-but-idempotent, non-destructive behavior, and the description adds real context beyond that: the value is never shown to members, an empty string clears the setting, notices fall back to the account's own email or phone, and a connected Phorme account is required. It stops short of describing error behavior if confirmation is omitted, but the schema handles that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with no filler, ordered from trigger to interaction rule to edge case to prerequisite. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with an output schema and full annotation coverage, the description supplies everything needed: the trigger, the confirmation protocol, the clearing behavior, the privacy constraint, and the account prerequisite.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, including the 'empty string clears' semantics and the confirmation gate. The description restates rather than extends this, which is the correct baseline of 3 when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource — setting the owner's email for plan notices — and frames the triggering scenario (owner who signed in by phone). It does not explicitly differentiate itself from similarly adjacent siblings such as set_booking_notices or send_note_to_my_members, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('an owner who signed in by phone wants notices...'), an operational procedure (read the email back, set confirmation true only after they said yes), and the clear-state case (empty email clears it). The agent knows both the trigger and the required interaction sequence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_gym_brainStart my gym's coaching brainAInspect

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.

NameRequiredDescriptionDefault
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
confirmationYesSet to true only after the owner said yes to starting a coaching brain for this place.
days_per_weekNoTraining days a week the starting program is built for. Default 3.

Output Schema

NameRequiredDescription
nextYes
openNoPublish checks still open, when it stayed a draft.
brain_idYes
place_idYes
publishedNo
builder_urlNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only mark it non-read-only, non-destructive, open-world), the description discloses the full side-effect chain — brain creation, a starting program from the library, publishing, and enrolling the place's members — plus the auth prerequisite (a connected Phorme account that owns the place) and the cost model (free on the free listing). It also encodes a consent gate via the confirmation flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the when-to-use clause and the confirmation requirement, then the side effects, then prerequisites. Dense but mostly earning its place; the middle sentence packs several effects into one long clause that is slightly harder to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, multi-effect operation, the description covers trigger, consent gate, side effects, prerequisites and post-state, and an output schema exists so return values need no explanation. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters including defaults and the place_id source. The description reinforces the confirmation semantics but adds no new syntax or format detail, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb and resource — it 'makes a brain from the place's name, line and classes' and puts members under it — and describes the observable end state. It is clear, but it never explicitly distinguishes itself from the near-identical sibling start_my_coaching_brain, which the agent could easily confuse with this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear trigger ('when an owner wants a coaching brain for their place'), a required pre-step ('Confirm with the owner first'), and notes the result is editable afterwards. It does not state when NOT to use it or name the sibling alternative, so routing is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_my_coaching_brainStart my coaching brainAInspect

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.

NameRequiredDescriptionDefault
nameYesThe brain's name, as the coach chose it, for example "Hayes Strength".
methodNoHow the coach trains people, in their own words from this conversation. Never invented.
taglineNoOne line on who it is for, in the coach's words.
confirmationYesTrue only after the coach confirmed the name and method.

Output Schema

NameRequiredDescription
nextNo
brainYes
console_urlYes
method_savedNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare only write/non-destructive/non-open-world; the description goes further by disclosing the lifecycle state (a draft brain), the visibility rule (members see nothing until the coach publishes it in the coach console), and the auth requirement. This is exactly the kind of behavioral context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the trigger condition and followed by the effect, follow-on action, and prerequisite. Every sentence carries information, though the account/prerequisite sentence could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described. The description covers precondition, effect, visibility, and next step, leaving nothing an agent needs in order to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions already carry the constraints (length limits, 'never invented', confirmation must be true). The description reinforces that name and method come from the coach's own words, but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (creates a draft coaching brain) and scopes it precisely to a coach/trainer turning their own method into a brain. It is clearly distinguishable from siblings like find_coaching_brain (lookup) and save_program_to_my_coaching_brain (saving into an existing brain).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger conditions are given: use it when the coach has no brain yet or asks for a new one. It also names the downstream follow-on action ('a first program can then be saved to it as a draft') and a hard prerequisite (a connected Phorme account, created by signing in with a phone number).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unpublish_placeTake my place downA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
confirmationYesSet to true only after the owner said yes to taking this place down.

Output Schema

NameRequiredDescription
nextYes
placeYesThe place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=true and openWorld=true, but the description adds the concrete effects the annotations cannot: the page, map and Phorme connector stop listing it, while details and classes are retained for re-publishing. It also discloses the auth prerequisite (a connected Phorme account that owns the place) and the consent gate. No annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the triggering condition and consent requirement, then effects, then prerequisite. Every sentence carries distinct information (when, how to confirm, what changes, what is retained, auth need) with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and rich annotations, the description covers the remaining gaps an agent needs: the consent workflow, the partial (non-deleting) nature of the action, reversibility, and the account-ownership prerequisite. Nothing actionable is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so place_id's provenance and confirmation's meaning are already fully documented in the schema. The description only restates the confirmation rule ('set confirmation to true only after they said yes'), adding no new syntax or format detail beyond the structured fields; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('an owner wants their place off Phorme') and conveys scope precisely, including the reversibility ('can be put live again') that distinguishes it from the sibling publish_place. An agent can tell this is a takedown operation without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear triggering context ('Use this when an owner wants their place off Phorme for now') and a procedural precondition ('Confirm with the owner first'). It does not name the alternative (publish_place) or state when-not to use it, so it falls short of explicit routing, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_gym_brainChange my gym's coaching brainA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
nameNoThe coach's name members see.
colorNoThe brand colour, as #rrggbb.
voiceNoHow the coach talks to members, in the owner's words.
methodNoHow the gym trains: the principles the coach plans by.
taglineNoOne line under the name.
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
confirmationYesSet to true only after the owner said yes to these changes to the coaching brain.
cover_image_urlNoAn https link to the cover photo.

Output Schema

NameRequiredDescription
lintNoLines in the voice or method to look at before members read them.
nextYes
brainNoname, tagline, look, persona (the voice), method, status and publish_version.
brain_idYes
place_idYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds non-obvious behavior beyond the annotations: changes are read back before confirming, empty values clear fields, and edits only reach members once the brain is published again. Annotations already cover the safety profile (idempotent, non-destructive), so this publish-delay and confirmation nuance is genuinely valuable context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use trigger and kept to a tight, information-dense paragraph where each clause carries a distinct fact (fields, confirmation rule, partial-update semantics, publish delay, prerequisites). Slightly dense but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers trigger, prerequisites, mutation semantics, and the publish dependency, and an output schema exists so return values need no description. Minor gap: no detail on failure/error behavior if the brain does not exist or confirmation is false.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns above that by explaining partial-update semantics ("only the things given change; an empty value clears one"), which the schema does not state. This meaningfully clarifies how to call an 8-param update.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (change) and resource (the place's coaching brain) and enumerates exactly what can be altered: name, tagline, voice, method, colour, cover photo. This distinguishes it clearly from sibling update_place and aligns each field with the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger ("Use this when an owner wants to change...") and states prerequisites (an existing coaching brain, a connected Phorme account owning the place) plus the confirm-before-write workflow. It references the publish flow implicitly but does not name sibling tools like update_place or publish_gym_brain as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_placeUpdate my placeA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
latNoLatitude of the map pin, only to set it by hand.
lonNoLongitude of the map pin, only to set it by hand.
cityNo
kindNoWhat the place is: gym (also studios and boxes) or a kind of care.
lineNoOne line on what the place is, in the owner's words.
nameNo
aboutNoOne or two plain sentences about the place, in the owner's words.
hoursNoOpening hours, one line each, for example ["Mon to Fri, 6 am to 9 pm", "Sat, 8 am to noon"].
phoneNoThe place's public phone number, as the owner gave it.
pricesNoWhat training at the place costs, shown on its page, in the owner's own words: one line each, for example "Drop-in 25 dollars", or { label, amount (in dollars) or amount_cents, period, note }. At most 12; an empty list clears them. Repeat them only to the owner.
addressNoThe street address. The map pin is found from it.
countryNo
websiteNoThe place's own website, starting with https://.
book_urlNoThe place's own booking page, starting with https://.
place_idYesThe place_id of one of the owner's places, from get_gym_report or create_or_claim_place.
timezoneNoThe place's IANA time zone, for example "America/Chicago".
book_labelNoThe words on its booking button, for example "Book a class".
confirmationYesSet to true only after the owner said yes to these changes.
request_emailNoWhere booking confirmations and requests are emailed. Never shown in public.

Output Schema

NameRequiredDescription
nextYes
placeYesThe place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan).

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotent, non-destructive), the description discloses that only supplied fields change, that an empty value clears a field, that a new address moves the map pin, that a live page updates immediately, and that a connected Phorme account owning the place is required. These are exactly the behavioral details an agent needs before invoking a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the use case and confirmation workflow, then packs field and side-effect details into a few dense sentences. It is appropriately sized for 19 parameters, though some clauses are tightly stacked.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 19 parameters, an output schema, and rich annotations, the description covers the required elements: auth requirement, confirmation gating, clearing semantics, and side effects. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (84%), so the schema already documents individual parameters, setting a baseline of 3. The description adds meaningful cross-parameter semantics not present in the schema: 'Only the things given change; an empty value clears one' and that address changes reposition the map pin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('change what their place's page says') and enumerates the updatable fields, making the tool's scope unmistakable. It does not, however, explicitly name or distinguish itself from any sibling tool such as update_gym_brain or publish_place, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear when-to-use trigger ('when an owner wants to change...') and an explicit workflow: read changes back, set confirmation only after the owner says yes. It provides no when-not-to-use guidance or alternative-tool routing, so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_place_claimEnter my place claim codeAInspect

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.

NameRequiredDescriptionDefault
codeYesThe six digit code, as the owner gave it.
claim_idYesThe claim_id from claim_place.
confirmationYesSet to true only after the owner said yes to entering this code.

Output Schema

NameRequiredDescription
nextYes
claimYes
placeNoThe place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false) it discloses the consequential behavior an agent needs: a right code transfers ownership, a wrong one changes nothing, failure is bounded by five wrong tries or 24 hours after which the place must be reclaimed again. It also states there is no payment and that a connected account is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is dense but front-loaded: the trigger condition leads, followed by the interaction script and the consequences. Every sentence carries distinct operational weight (auth, rate limit, side effect, payment).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers everything else an agent needs: when it applies, the auth requirement, the failure/expiry bounds, and the ownership side effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, including the exact 'set true only after the owner said yes' language that the description repeats for confirmation. The description adds only the minor procedural point of reading the code back first, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('verify...the six digit code Phorme sent to their place's own email or phone') and its scope, which distinguishes it cleanly from the sibling claim_place (which creates the claim). An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the trigger condition precisely ('when an owner has the six digit code... after they claimed it') and gives procedural prerequisites (read the code back, set confirmation only after yes, needs a connected Phorme account). It does not name the sibling alternatives (claim_place / create_or_claim_place) or outline when-not to use it, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Changedbook_gym_class2 fields changed
      • removedOutput schema / properties / pay_url
        Removed value: -{
        -  "description": "Phorme's own payment page for this booking, only when status is pending_payment.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / status / description
        Previous value: -"booked: the user is in. waitlisted: the class is full; Phorme moves them up if a spot opens. pending_payment: the spot is held 15 minutes while they pay at pay_url. requested: the gym is told they asked; held up to 7 days, not a booking yet. book_on_phorme: nothing was booked; give them book_url."New value: +"booked: the user is in. waitlisted: the class is full; Phorme moves them up if a spot opens. pending_payment: the class is paid and the spot is held 15 minutes; they finish booking it from place.page_url. requested: the gym is told they asked; held up to 7 days, not a booking yet. book_on_phorme: nothing was booked; give them book_url."
    • Changedfind_clinic2 fields changed
      • removedInput schema / properties / near_lat
        Removed value: -{
        -  "description": "Latitude, only if the user shared their position.",
        -  "maximum": 90,
        -  "minimum": -90,
        -  "type": "number"
        -}
      • removedInput schema / properties / near_lon
        Removed value: -{
        -  "description": "Longitude, only if the user shared their position.",
        -  "maximum": 180,
        -  "minimum": -180,
        -  "type": "number"
        -}
    • Changedfind_gym_class3 fields changed
      • removedInput schema / properties / near_lat
        Removed value: -{
        -  "description": "Latitude, only if the user shared their position.",
        -  "maximum": 90,
        -  "minimum": -90,
        -  "type": "number"
        -}
      • removedInput schema / properties / near_lon
        Removed value: -{
        -  "description": "Longitude, only if the user shared their position.",
        -  "maximum": 180,
        -  "minimum": -180,
        -  "type": "number"
        -}
      • changedInput schema / properties / radius_km / description
        Previous value: -"How far from the shared position to look, in km. Default 60. Use a larger one only when the user said they would travel."New value: +"How far to look, in km. Default 60. Use a larger one only when the user said they would travel."
  2. 4 tool updates
    • Addedcopy_coach_from_code
    • Changedfind_coaching_brain4 fields changed
      • addedInput schema / properties / code
        Added value: +{
        +  "description": "A Phorme coach code exactly as the user gave it, for example \"K7Q2-XR4D\", or a phor.me/c/ link. Only when they gave one.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
      • changedInput schema / properties / goal / description
        Previous value: -"What the user wants from training, in their words, for example \"jump higher\" or \"first HYROX race\"."New value: +"What the user wants from training, in their words, for example \"jump higher\" or \"first HYROX race\". Needed unless a code is given."
      • removedInput schema / required
        Removed value: -[
        -  "goal"
        -]
      • addedOutput schema / properties / code
        Added value: +{
        +  "description": "The coach code that was looked up, when one was given.",
        +  "type": "string"
        +}
    • Addedget_my_brain_code
    • Addedset_my_brain_rules
  3. 13 tool updates
    • Addedcover_member
    • Changedcreate_or_claim_place1 field changed
      • changedOutput schema / properties / place / description
        Previous value: -"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."New value: +"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."
    • Addedget_gym_billing_link
    • Addedget_payout_setup_link
    • Addedget_payouts
    • Addedpublish_gym_brain
    • Changedpublish_place1 field changed
      • changedOutput schema / properties / place / description
        Previous value: -"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."New value: +"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."
    • Addedset_booking_notices
    • Addedset_owner_email
    • Changedunpublish_place1 field changed
      • changedOutput schema / properties / place / description
        Previous value: -"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."New value: +"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."
    • Addedupdate_gym_brain
    • Changedupdate_place1 field changed
      • changedOutput schema / properties / place / description
        Previous value: -"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."New value: +"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."
    • Changedverify_place_claim1 field changed
      • changedOutput schema / properties / place / description
        Previous value: -"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."New value: +"The place: place_id, name, kind, line, city, country, address, hours, about, book_url, request_email, request_phone (texts, never public), prices, phone, timezone, status (draft or live), page_url, upcoming_classes, brain_id, on_plan, held_requests and plan_url (the plan on phor.me, a price-free link; null when on the plan)."
  4. 17 tool updates
    • Addedanswer_held_request
    • Addedbook_gym_class
    • Addedcancel_gym_booking
    • Changedcheck_place_in_ai2 fields changed
      • addedOutput schema / properties / next_step
        Added value: +{
        +  "description": "What the next step does, in one line.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / next_step_url
        Added value: +{
        +  "description": "Free next step: claim the place on Phorme (a race: the organiser page). It names no price.",
        +  "type": "string"
        +}
    • Addedclaim_place
    • Addedcreate_or_claim_place
    • Changedfind_coaching_brain1 field changed
      • addedInput schema / properties / coach
        Added value: +{
        +  "description": "A coach the user named, for example \"Cameron Goodson\". Only that coach's brains are returned.",
        +  "maxLength": 80,
        +  "type": "string"
        +}
    • Changedfind_gym_class3 fields changed
      • addedInput schema / properties / radius_km
        Added value: +{
        +  "description": "How far from the shared position to look, in km. Default 60. Use a larger one only when the user said they would travel.",
        +  "maximum": 300,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / alternatives
        Added value: +{
        +  "description": "When nothing matched or no class is scheduled: kind (wider_radius, other_cities, home_plan), line (what to offer), tool, and for wider_radius the nearest places further out. Offer them; never leave the user with nothing.",
        +  "type": "array"
        +}
      • changedOutput schema / properties / places / description
        Previous value: -"Gyms and studios, nearest or best matching first: name, kind, line, city, country, distance_km, page_url and classes (title, line, starts, minutes, spots_left, book_url)."New value: +"Gyms, studios and other places to train, nearest or best matching first: place_id, name, kind, line, city, country, distance_km, page_url and classes (class_id, the id book_gym_class takes, then title, line, starts, minutes, spots_left, book_url)."
    • Addedget_gym_report
    • Addedlist_held_requests
    • Addedpublish_place
    • Addedset_class_schedule
    • Addedset_member_cover
    • Addedstart_gym_brain
    • Addedunpublish_place
    • Addedupdate_place
    • Addedverify_place_claim
  5. 1 tool update
    • Changedfind_personal_coach1 field changed
      • changedOutput schema / properties / coaches / description
        Previous value: -"Each coach taking 1:1 clients: coach, coach_url, offer, summary, includes, spots (status, detail, open), page_url and how_it_starts."New value: +"Each coach taking 1:1 clients: coach, coach_url, offer, summary, includes, spots (status, detail, open), page_url, how_it_starts, and free_review (open, page_url) when the coach has a free plan review spot this week."
  6. 3 tool updates
    • Changedcheck_place_in_ai3 fields changed
      • changedInput schema / properties / city / description
        Previous value: -"The city it is in."New value: +"The city it is in (for a race, where it is held)."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "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"
        -]New value: +[
        +  "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"
        +]
      • changedInput schema / properties / place / description
        Previous value: -"The gym or clinic's name, as the owner wrote it."New value: +"The gym, clinic or race's name, as the owner or organiser wrote it."
    • Changedfind_races1 field changed
      • changedOutput schema / properties / races / description
        Previous value: -"Races by date: name, city, country, on (YYYY-MM-DD or null), url (the race's own page), registration (status open, sold_out, opening_soon or closed, its url and checked_on, or null) and has_plan."New value: +"Races by date: name, city, country, on (YYYY-MM-DD or null), url (the race's own page), registration (status open, sold_out, opening_soon or closed, its url and checked_on, or null), has_plan, and logistics (the race's own venue, packet pickup, airport, official hotels and guide links as the organiser listed them, with source_url and checked_on; null when not given)."
    • Changedplan_for_race1 field changed
      • changedOutput schema / properties / race / description
        Previous value: -"The race as listed: name, city, country, on (YYYY-MM-DD, null when not yet published) and url, the race's own page."New value: +"The race as listed: name, city, country, on (YYYY-MM-DD, null when not yet published), url (the race's own page), registration, and logistics: the race's own venue, packet_pickup, airport, getting_there, hotels (up to 6 official hotels, each name, url and note), course_url, athlete_guide_url, source_url and checked_on, as the organiser listed them, or null."
  7. 1 tool update
    • Addedfind_personal_coach
  8. 3 tool updates
    • Addedcheck_place_in_ai
    • Addedfind_clinic
    • Addedstart_my_coaching_brain
  9. 5 tool updates
    • Changedpreview_program_import3 fields changed
      • changedOutput schema / properties / exercises / description
        Previous value: -"Each exercise with its Phorme library match. Share the demo_url links with the user."New value: +"Each exercise with its Phorme library match and demo link."
      • changedOutput schema / properties / preview_id / description
        Previous value: -"Pass this to the matching save tool after the user confirms."New value: +"Identifies this preview when it is saved."
      • changedOutput schema / properties / requires_confirmation / description
        Previous value: -"Always true. Ask the user before saving."New value: +"Always true: saving needs the user's confirmation."
    • Changedpreview_workout_import3 fields changed
      • changedOutput schema / properties / exercises / description
        Previous value: -"Each exercise with its Phorme library match. Share the demo_url links with the user."New value: +"Each exercise with its Phorme library match and demo link."
      • changedOutput schema / properties / preview_id / description
        Previous value: -"Pass this to the matching save tool after the user confirms."New value: +"Identifies this preview when it is saved."
      • changedOutput schema / properties / requires_confirmation / description
        Previous value: -"Always true. Ask the user before saving."New value: +"Always true: saving needs the user's confirmation."
    • Changedrender_training_import4 fields changed
      • changedInput schema / properties / open_url / description
        Previous value: -"The open_url from a save tool or get_saved_training. Leave out for previews."New value: +"Link that opens the saved training in Phorme. Not set for previews."
      • changedInput schema / properties / status / description
        Previous value: -"Use \"preview\" after a preview tool and \"saved\" after a save tool or get_saved_training."New value: +"\"preview\" for training not yet saved, \"saved\" for training saved to Phorme."
      • changedOutput schema / properties / open_url / description
        Previous value: -"The open_url from a save tool or get_saved_training. Leave out for previews."New value: +"Link that opens the saved training in Phorme. Not set for previews."
      • changedOutput schema / properties / status / description
        Previous value: -"Use \"preview\" after a preview tool and \"saved\" after a save tool or get_saved_training."New value: +"\"preview\" for training not yet saved, \"saved\" for training saved to Phorme."
    • Changedsave_program_to_phorme1 field changed
      • changedInput schema / properties / preview_id / description
        Previous value: -"The preview_id returned by preview_program_import."New value: +"The preview_id of the preview being saved."
    • Changedsave_workout_to_phorme1 field changed
      • changedInput schema / properties / preview_id / description
        Previous value: -"The preview_id returned by preview_workout_import."New value: +"The preview_id of the preview being saved."
  10. 2 tool updates
    • Addedfind_races
    • Addedplan_for_race
  11. 1 tool update
    • Addedfind_gym_class
  12. 3 tool updates
    • Addedget_my_coaching_business
    • Addedsave_program_to_my_coaching_brain
    • Addedsend_note_to_my_members
  13. 1 tool update
    • Changedfind_coaching_brain1 field changed
      • changedOutput schema / properties / brains / description
        Previous value: -"Best fit first: id, name, coach, coach_title, focus, how_it_trains, image_url and image_alt (the coach's room in Phorme: show it as the brain's picture, never a web photo), programmes (name, summary, weeks, days_per_week, image_url) and why it fits."New value: +"Best fit first: id, name, coach, coach_title, focus, how_it_trains, image_url and image_alt (Phorme's own picture of the brain, its programme cover or its coach's room: show it, never a web photo), programmes (name, summary, weeks, days_per_week, image_url) and why it fits."
  14. 1 tool update
    • Changedfind_coaching_brain1 field changed
      • changedOutput schema / properties / brains / description
        Previous value: -"Best fit first: id, name, coach, coach_title, focus, how_it_trains, image_url and image_alt (Phorme's own picture of the brain), programmes (name, summary, weeks, days_per_week, image_url) and why it fits."New value: +"Best fit first: id, name, coach, coach_title, focus, how_it_trains, image_url and image_alt (the coach's room in Phorme: show it as the brain's picture, never a web photo), programmes (name, summary, weeks, days_per_week, image_url) and why it fits."
  15. 2 tool updates
    • Changedfind_coaching_brain1 field changed
      • changedOutput schema / properties / brains / description
        Previous value: -"Best fit first: id, name, coach, coach_title, focus, how_it_trains, programmes (name, summary, weeks, days_per_week) and why it fits."New value: +"Best fit first: id, name, coach, coach_title, focus, how_it_trains, image_url and image_alt (Phorme's own picture of the brain), programmes (name, summary, weeks, days_per_week, image_url) and why it fits."
    • Changedpreview_sport_week1 field changed
      • changedOutput schema / properties / brain / description
        Previous value: -"The coaching brain whose method the week follows: name, coach, focus and how_it_trains. Name it to the user."New value: +"The coaching brain whose method the week follows: name, coach, focus, how_it_trains and image_url (Phorme's own picture). Name it to the user."
  16. 2 tool updates
    • Addedfind_coaching_brain
    • Changedpreview_sport_week1 field changed
      • addedOutput schema / properties / brain
        Added value: +{
        +  "description": "The coaching brain whose method the week follows: name, coach, focus and how_it_trains. Name it to the user.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
  17. 13 tool updates
    • First observedfind_exercise_swap
    • First observedget_lift_progress
    • First observedget_phorme_program
    • First observedget_planned_sessions
    • First observedget_saved_training
    • First observedget_training_history
    • First observedpreview_program_import
    • First observedpreview_sport_week
    • First observedpreview_workout_import
    • First observedrender_training_import
    • First observedsave_program_to_phorme
    • First observedsave_workout_to_phorme
    • First observedsearch_phorme_programs

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Lets Claude build structured runs, strength sessions, and multi-week training plans — including race and high-school track blocks — and publish them through a feed that an iPhone app schedules onto the Apple Watch via WorkoutKit. It also reads recent Strava activities and sync status so plans can be sized to real fitness and confirmed as actually on the wrist.
    14
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    AI-powered coaching for runners, cyclists, swimmers, and triathletes, enabling personalized workouts, training plan adaptation, performance analytics, and AI coaching via Claude, MCP clients, or HTTP.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    An AI training coach MCP server that integrates with Garmin Connect to provide science-based load management, code-enforced injury gates, and persistent coaching memory, keeping data local.
    23 PyPI
    2
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.