Phorme Training
Gym workouts with demos, sport gym weeks, coach programs and your training log, saved to Phorme.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"phorme-training": {
"url": "https://phor.me/api/mcp"
}
}
}Remote-Endpunkte
https://phor.me/api/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (14)
🟡preview_workout_import(workout, available_equipment, time_limit_minutes, origin)
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. Show the user every warning and ask before calling save_workout_to_phorme. Do not use it for multiweek programs, nutrition plans, or pain and injury questions.
Eingabe-Schema
{
"type": "object",
"properties": {
"workout": {
"type": "object",
"additionalProperties": false,
"required": [
"exercises"
],
"description": "The workout to preview, taken from this conversation.",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Workout name, for example \"Lower body strength\"."
},
"notes": {
"type": "string",
"maxLength": 2000,
"description": "Short note for the whole workout."
},
"estimated_duration_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 360,
"description": "Expected length of the workout in minutes."
},
"exercises": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"description": "Exercises in the order they are performed. At most 300 sets in total.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"sets",
"reps"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Exercise name as written in the conversation, for example \"Back squat\"."
},
"sets": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Number of sets."
},
"reps": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Reps per set as short text, for example \"8\", \"8-10\", \"AMRAP\" or \"40 sec\"."
},
"rest": {
"type": "string",
"maxLength": 40,
"description": "Rest between sets, for example \"90 sec\" or \"2 min\"."
},
"duration": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 7200,
"description": "Work time in seconds for a timed exercise."
},
"load": {
"type": "string",
"maxLength": 80,
"description": "Target load, for example \"80%\", \"135 lb\", \"60 kg\", \"bodyweight\" or \"RPE 8\"."
},
"notes": {
"type": "string",
"maxLength": 500,
"description": "Short coaching note for this exercise."
}
}
}
}
}
},
"available_equipment": {
"type": "array",
"maxItems": 20,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"description": "Equipment the user said they have, for example [\"dumbbells\", \"bench\"] or [\"none\"]. Leave out when the user did not say."
},
"time_limit_minutes": {
"type": "integer",
"minimum": 5,
"maximum": 180,
"description": "Minutes the user said they have. Leave out when the user did not say."
},
"origin": {
"type": "string",
"enum": [
"conversation",
"sport_week"
],
"description": "Use \"sport_week\" when the workout is a session returned by preview_sport_week. Otherwise leave out."
}
},
"required": [
"workout"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"preview_id": {
"type": "string",
"format": "uuid",
"description": "Pass this to the matching save tool after the user confirms."
},
"expires_at": {
"type": "string",
"description": "When the preview can no longer be saved, as an ISO 8601 time."
},
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
]
},
"title": {
"type": "string"
},
"exercise_count": {
"type": "integer"
},
"estimated_duration_minutes": {
"type": [
"integer",
"null"
]
},
"warning_count": {
"type": "integer"
},
"warnings": {
"type": "array",
"description": "Items the user should review before saving.",
"items": {
"type": "object",
"required": [
"code",
"path",
"message"
],
"properties": {
"code": {
"type": "string"
},
"path": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
},
"requires_confirmation": {
"type": "boolean",
"description": "Always true. Ask the user before saving."
},
"exercises": {
"type": "array",
"description": "Each exercise with its Phorme library match. Share the demo_url links with the user.",
"items": {
"type": "object",
"required": [
"name",
"library_name",
"equipment",
"equipment_ok",
"demo_url"
],
"properties": {
"name": {
"type": "string"
},
"library_name": {
"type": [
"string",
"null"
],
"description": "The Phorme movement it matched, or null when nothing matched."
},
"equipment": {
"type": [
"string",
"null"
],
"description": "Equipment the matched movement uses."
},
"equipment_ok": {
"type": [
"boolean",
"null"
],
"description": "Whether that fits the equipment the user listed. Null when no equipment was given or the library does not say."
},
"demo_url": {
"type": [
"string",
"null"
],
"description": "Page with the movement demo."
}
}
}
}
},
"required": [
"preview_id",
"expires_at",
"training_kind",
"title",
"exercise_count",
"estimated_duration_minutes",
"warning_count",
"warnings",
"requires_confirmation"
]
}🟡save_workout_to_phorme(preview_id, confirmation, idempotency_key)
Use this only after preview_workout_import returned a preview and the user clearly said to save it. It saves that workout to the connected Phorme account as a private workout and returns a link that opens it in Phorme; share that link with the user. 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"preview_id": {
"type": "string",
"format": "uuid",
"description": "The preview_id returned by preview_workout_import."
},
"confirmation": {
"type": "boolean",
"const": true,
"description": "Set to true only after the user clearly confirmed this save in the conversation."
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "A unique string for this save. Reuse the same value when retrying so no second copy is created."
}
},
"required": [
"preview_id",
"confirmation",
"idempotency_key"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
]
},
"training_id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"saved"
]
},
"open_url": {
"type": "string",
"description": "Link that opens the saved training in Phorme."
}
},
"required": [
"training_kind",
"training_id",
"status",
"open_url"
]
}🟡preview_program_import(program)
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. Show the user every warning and ask before calling save_program_to_phorme. Do not use it for a single workout, nutrition plans or medical questions.
Eingabe-Schema
{
"type": "object",
"properties": {
"program": {
"type": "object",
"additionalProperties": false,
"required": [
"title",
"weeks"
],
"description": "The multiweek program to preview, taken from this conversation. At most 500 workouts in total.",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Program name, for example \"Four week strength base\"."
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Short summary of the program."
},
"difficulty": {
"type": "string",
"enum": [
"beginner",
"intermediate",
"advanced"
],
"description": "Intended training level. Defaults to intermediate."
},
"weeks": {
"type": "array",
"minItems": 1,
"maxItems": 52,
"description": "Weeks in order.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"week_number",
"workouts"
],
"properties": {
"week_number": {
"type": "integer",
"minimum": 1,
"maximum": 52,
"description": "Week position in the program, starting at 1. Each week_number appears once."
},
"focus": {
"type": "string",
"maxLength": 300,
"description": "Short focus for the week, for example \"Volume\"."
},
"workouts": {
"type": "array",
"minItems": 1,
"maxItems": 14,
"description": "Workouts in this week.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"day_number",
"exercises"
],
"properties": {
"day_number": {
"type": "integer",
"minimum": 1,
"maximum": 14,
"description": "Day position within the week, starting at 1. Each day_number appears once in a week."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Workout name, for example \"Lower body strength\"."
},
"notes": {
"type": "string",
"maxLength": 2000,
"description": "Short note for the whole workout."
},
"estimated_duration_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 360,
"description": "Expected length of the workout in minutes."
},
"exercises": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"description": "Exercises in the order they are performed. At most 300 sets in total.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"sets",
"reps"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Exercise name as written in the conversation, for example \"Back squat\"."
},
"sets": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Number of sets."
},
"reps": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Reps per set as short text, for example \"8\", \"8-10\", \"AMRAP\" or \"40 sec\"."
},
"rest": {
"type": "string",
"maxLength": 40,
"description": "Rest between sets, for example \"90 sec\" or \"2 min\"."
},
"duration": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 7200,
"description": "Work time in seconds for a timed exercise."
},
"load": {
"type": "string",
"maxLength": 80,
"description": "Target load, for example \"80%\", \"135 lb\", \"60 kg\", \"bodyweight\" or \"RPE 8\"."
},
"notes": {
"type": "string",
"maxLength": 500,
"description": "Short coaching note for this exercise."
}
}
}
}
}
}
}
}
}
}
}
}
},
"required": [
"program"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"preview_id": {
"type": "string",
"format": "uuid",
"description": "Pass this to the matching save tool after the user confirms."
},
"expires_at": {
"type": "string",
"description": "When the preview can no longer be saved, as an ISO 8601 time."
},
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
]
},
"title": {
"type": "string"
},
"exercise_count": {
"type": "integer"
},
"estimated_duration_minutes": {
"type": [
"integer",
"null"
]
},
"warning_count": {
"type": "integer"
},
"warnings": {
"type": "array",
"description": "Items the user should review before saving.",
"items": {
"type": "object",
"required": [
"code",
"path",
"message"
],
"properties": {
"code": {
"type": "string"
},
"path": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
},
"requires_confirmation": {
"type": "boolean",
"description": "Always true. Ask the user before saving."
},
"exercises": {
"type": "array",
"description": "Each exercise with its Phorme library match. Share the demo_url links with the user.",
"items": {
"type": "object",
"required": [
"name",
"library_name",
"equipment",
"equipment_ok",
"demo_url"
],
"properties": {
"name": {
"type": "string"
},
"library_name": {
"type": [
"string",
"null"
],
"description": "The Phorme movement it matched, or null when nothing matched."
},
"equipment": {
"type": [
"string",
"null"
],
"description": "Equipment the matched movement uses."
},
"equipment_ok": {
"type": [
"boolean",
"null"
],
"description": "Whether that fits the equipment the user listed. Null when no equipment was given or the library does not say."
},
"demo_url": {
"type": [
"string",
"null"
],
"description": "Page with the movement demo."
}
}
}
}
},
"required": [
"preview_id",
"expires_at",
"training_kind",
"title",
"exercise_count",
"estimated_duration_minutes",
"warning_count",
"warnings",
"requires_confirmation"
]
}🟡save_program_to_phorme(preview_id, confirmation, idempotency_key)
Use this only after preview_program_import returned a preview and the user clearly said to save it. It saves that program to the connected Phorme account as a private program and returns a link that opens it in Phorme; share that link with the user. 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"preview_id": {
"type": "string",
"format": "uuid",
"description": "The preview_id returned by preview_program_import."
},
"confirmation": {
"type": "boolean",
"const": true,
"description": "Set to true only after the user clearly confirmed this save in the conversation."
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "A unique string for this save. Reuse the same value when retrying so no second copy is created."
}
},
"required": [
"preview_id",
"confirmation",
"idempotency_key"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
]
},
"training_id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"saved"
]
},
"open_url": {
"type": "string",
"description": "Link that opens the saved training in Phorme."
}
},
"required": [
"training_kind",
"training_id",
"status",
"open_url"
]
}🟢get_saved_training(training_kind, training_id)
Use this when the user asks about a workout or program that a save tool already saved 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 returned by a save tool. It cannot list, search, edit or delete training.
Eingabe-Schema
{
"type": "object",
"properties": {
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
],
"description": "Whether the saved item is a workout or a program."
},
"training_id": {
"type": "string",
"format": "uuid",
"description": "The training_id returned by save_workout_to_phorme or save_program_to_phorme."
}
},
"required": [
"training_kind",
"training_id"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
]
},
"training_id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"saved"
]
},
"open_url": {
"type": "string",
"description": "Link that opens the saved training in Phorme."
},
"title": {
"type": [
"string",
"null"
]
}
},
"required": [
"training_kind",
"training_id",
"status",
"open_url",
"title"
]
}🟢render_training_import(title, training_kind, exercise_count, estimated_duration_minutes, warning_count, ...)
Use this to show the user a compact Phorme card after a save tool or get_saved_training has returned, or after preview_program_import. Pass the matching fields from that result. It only displays the values you pass. It reads and changes nothing in Phorme.
Eingabe-Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 160,
"description": "Training title from the tool result."
},
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
]
},
"exercise_count": {
"type": "integer",
"minimum": 0,
"maximum": 50000
},
"estimated_duration_minutes": {
"type": "integer",
"minimum": 0,
"maximum": 200000
},
"warning_count": {
"type": "integer",
"minimum": 0,
"maximum": 50000
},
"status": {
"type": "string",
"enum": [
"preview",
"saved"
],
"description": "Use \"preview\" after a preview tool and \"saved\" after a save tool or get_saved_training."
},
"open_url": {
"type": "string",
"maxLength": 300,
"description": "The open_url from a save tool or get_saved_training. Leave out for previews."
}
},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 160,
"description": "Training title from the tool result."
},
"training_kind": {
"type": "string",
"enum": [
"workout",
"program"
]
},
"exercise_count": {
"type": "integer",
"minimum": 0,
"maximum": 50000
},
"estimated_duration_minutes": {
"type": "integer",
"minimum": 0,
"maximum": 200000
},
"warning_count": {
"type": "integer",
"minimum": 0,
"maximum": 50000
},
"status": {
"type": "string",
"enum": [
"preview",
"saved"
],
"description": "Use \"preview\" after a preview tool and \"saved\" after a save tool or get_saved_training."
},
"open_url": {
"type": "string",
"maxLength": 300,
"description": "The open_url from a save tool or get_saved_training. Leave out for previews."
}
}
}🟢preview_sport_week(sport, gym_days_per_week, season_phase)
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; never present another sport's program as a match. To save one session, pass it to preview_workout_import with origin "sport_week". Do not use it for injury rehab, team practice plans for children, or nutrition.
Eingabe-Schema
{
"type": "object",
"properties": {
"sport": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "The sport or position, for example \"basketball\", \"volleyball\" or \"wide receiver\"."
},
"gym_days_per_week": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "Gym days the user has this week. Ask when the user did not say."
},
"season_phase": {
"type": "string",
"enum": [
"off_season",
"pre_season",
"in_season",
"unknown"
],
"description": "Where the user is in their season, only if they said."
}
},
"required": [
"sport",
"gym_days_per_week"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"sport": {
"type": "string"
},
"match_quality": {
"type": "string",
"enum": [
"exact_sport",
"related",
"none"
],
"description": "exact_sport: a program written for this sport. related: the closest program. none: a general athletic program."
},
"brain": {
"type": [
"object",
"null"
],
"description": "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."
},
"program": {
"type": [
"object",
"null"
],
"description": "The coach-built program the week comes from."
},
"week_number": {
"type": [
"integer",
"null"
]
},
"sessions": {
"type": "array",
"description": "One entry per gym day, each with a title and exercises."
},
"limits": {
"type": "array",
"items": {
"type": "string"
},
"description": "What this week does not cover. Tell the user."
}
},
"required": [
"sport",
"match_quality",
"program",
"sessions",
"limits"
]
}🟢find_coaching_brain(goal, sport, days_per_week)
Use this when the user wants a way to train for a goal or sport, for example "I want to get more explosive for basketball", "build muscle three days a week" or "train for a half marathon", and has not picked a programme. Phorme coaching brains are curated training methods: a coach, the principles the method trains by, and a coach-built programme. It returns up to three brains that fit, best first, each with its coach, focus, how it trains and its programmes with weeks and days a week. It reads only and changes nothing. Do not use it for injury rehab or nutrition.
Eingabe-Schema
{
"type": "object",
"properties": {
"goal": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "What the user wants from training, in their words, for example \"jump higher\" or \"first HYROX race\"."
},
"sport": {
"type": "string",
"maxLength": 80,
"description": "The sport or position, only if the user named one."
},
"days_per_week": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "Training days a week, only if the user said."
}
},
"required": [
"goal"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"goal": {
"type": "string"
},
"brains": {
"type": "array",
"description": "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."
},
"limits": {
"type": "array",
"items": {
"type": "string"
},
"description": "What this does not cover. Tell the user."
}
},
"required": [
"goal",
"brains",
"limits"
]
}🟢find_exercise_swap(exercise, available_equipment, reason)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"exercise": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "The exercise to replace, as the user wrote it, for example \"Seated cable row\"."
},
"available_equipment": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"description": "Equipment the user has, for example [\"dumbbells\", \"bench\"] or [\"none\"]. Ask when the user did not say."
},
"reason": {
"type": "string",
"enum": [
"equipment",
"busy",
"preference"
],
"description": "Why they need a swap, only if they said."
}
},
"required": [
"exercise",
"available_equipment"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"exercise": {
"type": "string"
},
"matched": {
"type": [
"string",
"null"
],
"description": "The Phorme library movement the exercise matched."
},
"pattern": {
"type": [
"string",
"null"
],
"description": "The kind of movement, for example horizontal_pull."
},
"match": {
"type": "string",
"enum": [
"same_kind",
"nearest_kind",
"none"
],
"description": "nearest_kind: nothing of the same kind fits the equipment, so these work the same muscles from a different angle."
},
"swaps": {
"type": "array",
"description": "Replacements, best first, each with name, equipment and demo_url."
},
"limits": {
"type": "array",
"items": {
"type": "string"
},
"description": "What the swaps do not cover. Tell the user."
}
},
"required": [
"exercise",
"match",
"swaps",
"limits"
]
}🟢get_training_history(limit)
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. Answer from these numbers only. To build a next workout from it, pass that workout to preview_workout_import.
Eingabe-Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "How many recent workouts to return, newest first. Defaults to 10."
}
},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"found": {
"type": "boolean",
"description": "False when this account has no Phorme training yet."
},
"total_logged": {
"type": "integer"
},
"last_7_days": {
"type": "integer"
},
"last_30_days": {
"type": "integer"
},
"workouts": {
"type": "array",
"description": "Newest first: date, title, minutes and exercises with sets, best_set, e1rm_lb and volume_lb."
},
"records": {
"type": "array",
"description": "Latest personal records: movement, label, value and date."
}
},
"required": [
"found"
]
}🟢get_lift_progress(movement, months)
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; ask which one they mean.
Eingabe-Schema
{
"type": "object",
"properties": {
"movement": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "The lift as the user said it, for example \"bench\", \"back squat\" or \"RDL\"."
},
"months": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"description": "How many months back to look. Defaults to 6."
}
},
"required": [
"movement"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"movement": {
"type": [
"string",
"null"
],
"description": "The logged lift that matched, or null."
},
"also_matched": {
"type": "array",
"items": {
"type": "string"
},
"description": "Other logged lifts the words also matched."
},
"points": {
"type": "array",
"description": "Oldest first: on, top_set, e1rm_lb, volume_lb, sets."
},
"change": {
"type": [
"object",
"null"
],
"description": "from_e1rm_lb, to_e1rm_lb, change_lb and change_pct over the period."
},
"best": {
"type": [
"object",
"null"
]
},
"logged_movements": {
"type": "array",
"items": {
"type": "string"
},
"description": "When nothing matched: the lifts they log most."
}
},
"required": [
"found"
]
}🟢get_planned_sessions(days)
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. Do not change the loads; for a different session, build one with preview_workout_import.
Eingabe-Schema
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"minimum": 1,
"maximum": 14,
"description": "How many days ahead, starting today. Defaults to 7."
}
},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"found": {
"type": "boolean"
},
"plan": {
"type": [
"string",
"null"
],
"description": "The name of the plan they follow."
},
"sessions": {
"type": "array",
"description": "In date order: on, title, status, minutes and exercises with sets, target, load and note."
}
},
"required": [
"found"
]
}🟢search_phorme_programs(goal, experience, equipment, schedule_days, sport, ...)
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 changes nothing. Results are ordered by fit and never by commission. Say that the full program comes with a Phorme membership only if the user asks; never show prices or start a purchase.
Eingabe-Schema
{
"type": "object",
"properties": {
"goal": {
"type": "string",
"maxLength": 200,
"description": "Training goal, for example \"build strength\"."
},
"experience": {
"type": "string",
"maxLength": 40,
"description": "Training level, for example \"beginner\"."
},
"equipment": {
"type": "array",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 60
},
"description": "Equipment the user has."
},
"schedule_days": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"description": "Training days per week."
},
"sport": {
"type": "string",
"maxLength": 80
},
"duration_weeks": {
"type": "integer",
"minimum": 1,
"maximum": 52
},
"creator": {
"type": "string",
"maxLength": 120,
"description": "Coach or creator name, only if the user named one."
}
},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"programs": {
"type": "array",
"description": "Matching programs, best fit first, each with title, coach, weeks, sample_session and access."
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"programs",
"limits"
]
}🟢get_phorme_program(program_id)
Use this when the user picked one program from search_phorme_programs and wants its details. It returns the program and every session of its first week, plus a link to a page that describes it, and records the pick privately so Phorme can credit the coach. It never shows prices or starts a purchase.
Eingabe-Schema
{
"type": "object",
"properties": {
"program_id": {
"type": "string",
"maxLength": 160,
"description": "The program id returned by search_phorme_programs."
}
},
"required": [
"program_id"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"first_week": {
"type": "array",
"description": "Every session of the first week with its exercises and demo links."
},
"info_url": {
"type": "string",
"description": "A page that describes the program. It has nothing to buy on it."
},
"access": {
"type": "string"
}
},
"required": [
"id",
"title",
"first_week",
"info_url",
"access"
]
}Community
Nachweis