HYBRD
Connect wearables to ChatGPT
- Category
- Health & Wellness
- Primary Subcategory
- Endurance Sport Training Planners
Integration details
Description
This plugin is the fastest way to connect any major wearable to ChatGPT / Codex via HYBRD. Analyze your fitness data, make the perfect training plan and send the workouts to your devices.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Endurance Sport Training Planners
- Secondary Subcategories
- None listed
- Brand
- HYBRD
- Access
- Account required
- First tracked
- 2026-09-29
- Tool count
- 31
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for HYBRD
Get updates when HYBRD’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Endurance Sport Training Planners
View Category31 tools agents can invoke
Completes one scheduled or skipped workout as planned for the athlete. Pass scheduledWorkoutId from the scheduledId field in list_workouts; workouts[].id is rejected. The planned workout becomes the completed workout. The response workoutId works with update_completed_workout and get_completed_workout. Already-completed rows are rejected and return the completed workoutId. Retry keys are optional.
complete_scheduled_workout
Creates a link so the athlete can connect a wearable or training app. Pass provider from the enum (for example GARMIN, WHOOP, HEVY, or STRAVA). Call list_integrations first to see what is already connected. Open connectUrl in a browser. If preConnectAlert is present, show it to the user first; some apps (Fitbod, Hevy, Strong, StrongLifts) have account requirements. Supported wearables and training apps import the last year of data after the user connects. GARMIN can read completed workouts and publish planned workouts when these features are available to the athlete. STRAVA publishes HYBRD workouts and does not import history. Apple Health requires the iOS app and cannot be connected through MCP. If the provider is already connected, no URL is returned.
connect_integration
Create the user's current training-plan structure. Before calling, call get_profile. If onboarding is incomplete, use its required TODO steps to work with the user on the remaining setup. The structure contains plan metadata and coaching intent. It does not contain or generate workouts. Put target times and unusual constraints in 'metadata.goalText', with extra detail in 'metadata.additionalNotes'. Optional 'metadata.planType' labels the plan; omitted stores CUSTOM. Use workout tools separately when the user asks for workouts.
create_plan_structure
Creates a completed or scheduled workout for the athlete. Before calling, call get_profile. If onboarding is incomplete, use its required TODO steps to work with the user on the remaining setup. occurrence.startTime must be an ISO 8601 date-time with an explicit UTC offset, such as Z or -07:00; use the user's IANA timezone from get_profile to pick the offset. Send each load, distance, and pace as a one-key object in the athlete's own unit, for example weight {lbs: 225} or {kg: 100}; never convert and never send both units. For unilateral reps, follow loggingPreferences.singleSidedLogging from get_profile. Description is at most 1028 characters. The response echoes the resolved startTime in the user's timezone, or UTC when unknown. structure is a discriminated union: type cardio (one modality plus its sets, one set per effort or interval; each set needs workSeconds, distance, calories, or reps) for single-modality cardio, or type rounds for strength, mixed-modality intervals, or multi-exercise workouts. For library or custom exercises, call search_exercises first and copy exercises[].exercise verbatim; do not invent exercise IDs. Use inlineCustom only when search_exercises finds no match, and cardio modalities for cardio. Retry keys are optional.
create_workout
Cancel the athlete's current training plan. Future scheduled workouts are removed, completed workouts stay in history detached from the plan, and this cannot be undone. Returns an empty success.
delete_plan_structure
Permanently deletes one workout for the athlete. Scheduled tools take scheduledId from list_workouts; completed tools take workouts[].id. Never invent ids. target.type names which id kind is being sent: {type: 'scheduled', scheduledWorkoutId} deletes a scheduled or skipped calendar slot; {type: 'completed', workoutId} deletes a completed (logged) or ad hoc workout. A completed workout that filled a calendar slot is deleted with type 'completed' and its workoutId; that also clears the slot. Deleting a completed workout removes its samples and rolls back the 1RM, plan weight, and HYBRD score values it contributed. This cannot be undone, so confirm with the user first.
delete_workout
Disconnects the athlete's connections for the specified provider. Pass provider from list_integrations. This stops future imports or direct publishing for that provider.
disconnect_integration
Returns body composition and daily activity from the athlete's connected devices: weight (kg), BMI, body fat, muscle and lean mass (g), VO2max, blood pressure, resting HR (bpm), blood glucose, steps, burned calories, activity seconds, stress, and body battery. Dates are local dates in the user's timezone. daysBack defaults to 30 and maxes at 90. Use loggingPreferences.preferredUnits for the units you speak to the user in. If providers is empty, the user has no device syncing this data; suggest connect_integration.
get_body_metrics
Returns one completed (logged) workout for the athlete, including title, description, discipline, startTime, durationSeconds, and full rounds with exercises and set prescriptions with unit-tagged load, distance, and pace. Scheduled tools take scheduledId from list_workouts; completed tools take workouts[].id. Never invent ids. Use list_workouts scheduledStatus to pick the tool: COMPLETED or ADHOC rows belong here; SCHEDULED or SKIPPED rows use get_scheduled_workout. Call this before update_completed_workout when changing exercises.
get_completed_workout
Returns which HYBRD account is connected to this MCP client: sign-in email, approved scopes, and subscription status. Call this to confirm the connection or when the user asks which account is signed in. When hasActiveSubscription is false, explain that an active HYBRD subscription is required. Complete account setup at https://app.hybrd.com or in the HYBRD iOS app (https://apps.apple.com/us/app/hybrd-hybrid-athlete-tracker/id6670271875).
get_account
Returns menstrual cycle phase, day-in-cycle, period and fertility window dates, flow, and phase-specific trainingGuidance from the athlete's connected trackers. Dates are local dates in the user's timezone. daysBack defaults to 45 and maxes at 120. Check latestIsFresh before describing the user's current cycle: when it is false, latest is stale, so its dayInCycle and daysUntilNextPhase are no longer correct. Report the phase and absolute dates only and ask the user where they are. Use trainingGuidance when advising on training; do not diagnose. If providers is empty, the user has no device syncing this data; suggest connect_integration.
get_menstrual_cycle
Returns daily nutrition from the athlete's connected apps: calories, macros in grams, sodium in milligrams, water in milliliters, meal count, and optional micros when includeMicros is true. Averages are over days that have data. Dates are local dates in the user's timezone. daysBack defaults to 7 and maxes at 90. If providers is empty, the user has no device syncing this data; suggest connect_integration.
get_nutrition
Read the user's current training-plan structure. The response contains plan metadata, coaching intent, and read-only generation and usage statuses. It does not include workouts. Use show_week for a weekly workout display, or list_workouts for date ranges and workout IDs.
get_plan_structure
Returns the athlete's biometrics, IANA timezone when stored, loggingPreferences, persisted hasOnboarded state, an onboardingMessage when setup is incomplete, and a compact onboarding summary. Use the TODO steps to explain what remains and work with the user to complete required setup. DEVICE is optional. PROFILE and BENCHMARKS writes need profile:write; DEVICE needs integrations:write. Read loggingPreferences.singleSidedLogging before prescribing unilateral reps: TOTAL_REPS is both sides combined; REPS_PER_SIDE is one side. Use loggingPreferences.preferredUnits for the units you speak to the user in. preferredUnits also picks which unit key to send on sets; writes carry their own unit and are never converted.
get_profile
Returns today's recovery and fatigue picture from the athlete's connected wearables: fatigue score 1-5 with trend and streak, HRV (ms RMSSD) and resting HR (bpm) versus 30-day baseline, last night's sleep headline, and deviceScores holding readiness, recovery, body battery, and avg stress from one device. Dates are local dates in the user's timezone. daysBack defaults to 7 and maxes at 90. Durations are seconds. If providers is empty, the user has no device syncing this data; suggest connect_integration.
get_recovery_status
Returns one scheduled or skipped (not yet completed) workout for the athlete, including title, description, discipline, startTime, durationSeconds, and full rounds with exercises and set prescriptions with unit-tagged load, distance, and pace. Scheduled tools take scheduledId from list_workouts; completed tools take workouts[].id. Never invent ids. Use list_workouts scheduledStatus to pick the tool: SCHEDULED or SKIPPED rows belong here; COMPLETED or ADHOC rows use get_completed_workout. Call this before update_scheduled_workout when changing exercises.
get_scheduled_workout
Returns night-by-night sleep from the athlete's connected wearables: duration asleep and in bed (seconds), stages, efficiency, latency, wakeups, HRV (ms RMSSD), resting HR (bpm), sleep score, and naps listed separately. Dates are local dates in the user's timezone. daysBack defaults to 7 and maxes at 90. If providers is empty, the user has no device syncing this data; suggest connect_integration.
get_sleep
Returns the athlete's latest known performance benchmark for each activity, including whether HYBRD estimated the value.
list_benchmarks
Returns the athlete's connected and available integrations. Call this before connect_integration or disconnect_integration so you know what is already connected. Apple Health can appear as connected, but it cannot be connected through MCP. If Garmin needs reauthorization for workout publishing, call connect_integration with GARMIN.
list_integrations
The athlete's scheduled and completed workouts as paged data for reasoning and ID discovery. Use when a workout mutation or detailed analysis needs workout IDs, date-range filtering, pagination, or full fields. Defaults to the last 7 days through the next 7 days, 20 workouts, and summary detail. Pass cursor from nextCursor for another page and detail='full' for expanded metrics. Not for a visual week card; use show_week. Scheduled tools take scheduledId from list_workouts; completed tools take workouts[].id. Never invent ids.
list_workouts
Pushes one scheduled workout to the athlete's connected Garmin, COROS, Wahoo, or Amazfit devices for one provider. Use when the athlete asks to send or resend a planned workout to a watch or bike computer. Not for creating or editing workouts, connecting a provider (connect_integration), or Apple Watch delivery, which requires the HYBRD iOS app. Pass scheduledWorkoutId from list_workouts scheduledId; completed workouts cannot be pushed. Set provider to GARMIN, COROS, WAHOO, or ZEPP. The tool targets all eligible devices for that provider. It returns the providers that accepted the workout, or an empty list with failure guidance.
push_workout_to_device
Update the athlete's current plan structure in place, including its name, plan type, dates, week count, phase layout, and all coaching intent. The operation does not move or change workouts. Send metadata, intents, or both; omit a document to leave that half unchanged. At least one of metadata or intents is required. A sent document replaces that document in full. Put target times and unusual constraints in 'metadata.goalText', with extra detail in 'metadata.additionalNotes'. Concurrent updates last-write-wins. Returns an empty success; read back with get_plan_structure. Not for a single week's or phase's text (update_plan_structure_week, update_plan_structure_phase).
put_plan_structure
Finds exercises in the HYBRD library plus the athlete's own custom exercises, returning the exact exercise reference to copy into create_workout or the update tools. Lexical only, not semantic. Filters combine with AND: a result must pass both query and nameGlobs; omit either filter to skip it, and omit both to browse alphabetically. query is one phrase such as 'bench press' or 'db row': a name matches when the phrase appears in it OR at least half of its words (minimum two) appear; bb, db, kb, rdl, and sl expand to their full words. Exact, prefix, and word-start matches rank first. nameGlobs are hard filters matched case-insensitive against the whole name, where * matches any characters and a pattern without * must equal the name; a name passes when ANY pattern matches (OR across patterns). Results return exercise (type library with exerciseId, or type custom with customExerciseId), the exact name, and discipline; copy exercises[].exercise as-is and never invent IDs. Default 15 results, limit max 20, offset max 1000. nextOffset is present only when more results exist; pass it back as offset with the same filters. Do not repeat an empty call with the same filters; broaden the query instead.
search_exercises
Show the athlete's complete Monday-Sunday workout week as a visual card. Use when the athlete asks to see this week, next week, or a specific week's schedule. Includes scheduled and completed workouts, workouts outside the current plan, elapsed days, and empty days. Completed activities are struck through. Omit weekStart for the current week or pass an athlete-local Monday. No prior list call is needed. Not for ID discovery or detailed analysis; use list_workouts.
show_week
Sends the athlete's product feedback, feature request, or bug report to the HYBRD team. Use when the athlete wants to leave feedback, request a capability, or report something that is broken. Ask which category applies when it is unclear. Message must state the problem and the desired outcome. Include only the details needed to understand the report; do not include chat history. Messages are limited to 2000 characters. Retries are not deduplicated.
submit_feedback
Updates the athlete's performance benchmarks. Values may be measured or estimated; set isEstimated true when the client estimated the value. HYBRD keeps history, merges stored rows, and fills related missing activities. For first onboarding, ask for at least one run, one upper-body, and one lower-body seed in the first call or across the first few calls.
upsert_benchmarks
Updates one completed (logged) workout for the athlete. Scheduled tools take scheduledId from list_workouts; completed tools take workouts[].id. Never invent ids. Patch any of title, description, startTime, durationSeconds, or discipline; description is at most 1028 characters, and startTime is an ISO 8601 timestamp with a UTC offset, and offsets are honored. Omitted fields are unchanged. Passing rounds replaces the whole exercise list, so call get_completed_workout first and send the complete edited rounds. Metadata and rounds may be sent together. For library or custom exercises, call search_exercises first and copy exercises[].exercise verbatim; do not invent exercise IDs. Use inlineCustom only when search_exercises finds no match, and cardio modalities for cardio. Send each load, distance, and pace as a one-key object in the athlete's own unit, for example weight {lbs: 225} or {kg: 100}; never convert and never send both units. Rounds returned by get tools read back as DEFAULT for EMOM and cap-less AMRAP; echoing them back replaces the stored round type. The workout must end at or before the current time. Scheduled or skipped workouts must use update_scheduled_workout. Retry keys are optional.
update_completed_workout
Edit one phase of the athlete's training plan: its phase type (preparation, build, peak, taper, deload), title, or description. This changes plan text and labels only. It never changes workouts and never changes which weeks the phase covers. Phases are addressed by the phaseNumber that get_plan_structure returns. Use when the athlete wants to rename a phase, rewrite its coaching intent, or relabel its type. Not for week-level notes (update_plan_structure_week), workouts (update_scheduled_workout), or redrawing phase boundaries (put_plan_structure). Omitted fields keep their stored value. Read get_plan_structure first for the current phaseNumber.
update_plan_structure_phase
Edit the coaching notes for one week of the athlete's training plan: the week's title, its description, or its deload flag. This changes plan text only. It never changes, adds, or removes workouts. Weeks are the Monday to Sunday blocks that get_plan_structure returns, addressed by weekNumber. Use when the athlete wants to retitle a week, rewrite what a week should focus on, or mark a week as deload. Not for editing the workouts inside a week (update_scheduled_workout) or for adding, removing, or moving weeks (put_plan_structure). Omitted fields keep their stored value. Read get_plan_structure first for the current weekNumber and text.
update_plan_structure_week
Intent: update the athlete's profile biometrics, including heart-rate max, resting HR, and zone floors, plus IANA timezone or loggingPreferences (singleSidedLogging and preferredUnits). Use when: the athlete explicitly provides a profile value or asks to correct one. Not for: LTHR, per-sport zones, workout logging, or inferred facts. Guardrails: send only known values; heart-rate patches are sparse; zone floors must increase strictly, zone1 must not be below resting HR, and zone5 must not exceed max HR.
update_profile
Updates one scheduled or skipped (not yet completed) workout for the athlete. Scheduled tools take scheduledId from list_workouts; completed tools take workouts[].id. Never invent ids. Patch any of title, description, startTime, durationSeconds, or discipline; description is at most 1028 characters, and startTime is an ISO 8601 timestamp with a UTC offset, and offsets are honored. Omitted fields are unchanged. Passing rounds replaces the whole exercise list, so call get_scheduled_workout first and send the complete edited rounds. Metadata and rounds may be sent together. For library or custom exercises, call search_exercises first and copy exercises[].exercise verbatim; do not invent exercise IDs. Use inlineCustom only when search_exercises finds no match, and cardio modalities for cardio. Send each load, distance, and pace as a one-key object in the athlete's own unit, for example weight {lbs: 225} or {kg: 100}; never convert and never send both units. Moving a skipped workout to today or later makes it SCHEDULED again. Rounds returned by get tools read back as DEFAULT for EMOM and cap-less AMRAP; echoing them back replaces the stored round type. Completed workouts must use update_completed_workout. Retry keys are optional.
update_scheduled_workout
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are HYBRD alternatives on ChatGPT?
As of 2026-09-29, HYBRD competes with AI Endurance, COROS, Eixo Run, Endorphins Running, Endurance Planner, Fitness AI Connector, Flow State, Freediver, Joules, Leo - Running Coach, PaceBeats, PaceKeeper AI, Pelaris, Propusher, rit.run, rit.run, Tredict, Vertical in ChatGPT Endurance Sport Training Planners, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.