Serveur MCP

GymFlexa Gym Management

com.gymflexa/gymflexa
Entreprise et opérations Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Provides tenant-scoped gym configuration, service catalogs, availability, schedule counts, and aggregated payment summaries.

get_gym
Get gym opening hours and settings
Use this when someone asks for one gym's opening hours, timezone, currency or default session length. Returns the gym's scheduling settings with up to 14 opening-hour rows, Monday first; an id outside the organization returns not-found. Not for free session slots.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gymId'], 'properties': {'gymId': {'type': 'string', 'pattern': '^[0-9a-f]{24}$', 'description': "Id of one of the user's gyms, as the gym list returns it (24 lowercase hex characters)"}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'gym'], 'properties': {'gym': {'anyOf': [{'type': 'object', 'required': ['id', 'name', 'currency', 'defaultLocale', 'timezone', 'countryCode', 'firstDayOfTheWeek', 'appointmentDuration', 'openingHours', 'lastEditTime'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9a-f]{24}$'}, 'name': {'type': 'string', 'maxLength': 200}, 'currency': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{3}$'}, {'type': 'null'}]}, 'timezone': {'anyOf': [{'type': 'string', 'maxLength': 64}, {'type': 'null'}]}, 'countryCode': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{2}$'}, {'type': 'null'}]}, 'lastEditTime': {'anyOf': [{'type': 'string', 'maxLength': 32}, {'type': 'null'}]}, 'openingHours': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'open', 'close'], 'properties': {'day': {'enum': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], 'type': 'string'}, 'open': {'anyOf': [{'type': 'string', 'pattern': '^\\d{2}:\\d{2}$'}, {'type': 'null'}]}, 'close': {'anyOf': [{'type': 'string', 'pattern': '^\\d{2}:\\d{2}$'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'maxItems': 14}, 'defaultLocale': {'anyOf': [{'type': 'string', 'maxLength': 16}, {'type': 'null'}]}, 'firstDayOfTheWeek': {'anyOf': [{'enum': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], 'type': 'string'}, {'type': 'null'}]}, 'appointmentDuration': {'type': ['number', 'null'], 'description': 'Default session length in minutes'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Scheduling settings of the gym; null when not found. Address, phone, website, organization, billing, integrations, reminders, members and arbitrary metadata are excluded.'}, 'status': {'enum': ['found', 'not-found'], 'type': 'string'}}, 'additionalProperties': False}
get_gym_availability
Find free session slots
Use this when someone asks when their gym has free slots or openings for a class or session, or which coming days are fully booked. Returns, per day, how many online-booking slots are open plus the first start and last end time, for the next 14 days that have openings, so a skipped day has none (no member or trainer names). Not for booking a session.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gymId'], 'properties': {'gymId': {'type': 'string', 'pattern': '^[0-9a-f]{24}$', 'description': "Id of one of the user's gyms, as the gym list returns it (24 lowercase hex characters)"}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['timezone', 'availableDayCount', 'availableSlotCount', 'days'], 'properties': {'days': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'slotCount', 'firstStartTime', 'lastEndTime'], 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'slotCount': {'type': 'integer', 'minimum': 0}, 'lastEndTime': {'anyOf': [{'type': 'string', 'maxLength': 32}, {'type': 'null'}]}, 'firstStartTime': {'anyOf': [{'type': 'string', 'maxLength': 32}, {'type': 'null'}]}}, 'additionalProperties': False}, 'maxItems': 14, 'description': "One row per day with open online-booking slots inside the gym's booking window, in date order. Slot counts and times only; members, appointments, trainers and the reason a time is unavailable are never exposed."}, 'timezone': {'anyOf': [{'type': 'string', 'maxLength': 64}, {'type': 'null'}]}, 'availableDayCount': {'type': 'integer', 'minimum': 0}, 'availableSlotCount': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}
get_gym_payment_summary
Summarize gym takings
Use this when someone asks how much their gym took in, or how many payments succeeded, failed or were canceled. Returns payment counts by status and totals by currency; totals include every status. Covers up to 31 days and 100 payments and defaults to the next 7 days, which hold no payments yet. Not for moving money: it cannot charge, refund or transfer.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gymId'], 'properties': {'gymId': {'type': 'string', 'pattern': '^[0-9a-f]{24}$', 'description': "Id of one of the user's gyms, as the gym list returns it (24 lowercase hex characters)"}, 'endTime': {'type': 'string', 'maxLength': 32, 'description': 'End of the range as an ISO 8601 date-time, after startTime and at most 31 days later; defaults to 7 days after the start'}, 'startTime': {'type': 'string', 'maxLength': 32, 'description': 'Start of the range as an ISO 8601 date-time, matched against when each payment was recorded; defaults to now, so pass a past date for past takings'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['range', 'recordCount', 'recordCountIsLowerBound', 'totalsArePartial', 'totals', 'statuses'], 'properties': {'range': {'type': 'object', 'required': ['startTime', 'endTime'], 'properties': {'endTime': {'type': 'string', 'maxLength': 32}, 'startTime': {'type': 'string', 'maxLength': 32}}, 'additionalProperties': False}, 'totals': {'type': 'array', 'items': {'type': 'object', 'required': ['currency', 'amount'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string', 'pattern': '^(?:[A-Z]{3}|UNSPECIFIED)$'}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Amount totals per currency, summed over every status including FAILED and CANCELED payments. Payment and member ids, processor or card data, contacts, notes, discounts, decline reasons, services and individual transactions are never returned.'}, 'statuses': {'type': 'array', 'items': {'type': 'object', 'required': ['status', 'count'], 'properties': {'count': {'type': 'integer', 'minimum': 0}, 'status': {'type': 'string', 'pattern': '^[A-Z0-9_-]{1,48}$'}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Payment counts per status, such as SUCCEEDED, FAILED, CANCELED or OTHER'}, 'recordCount': {'type': 'integer', 'minimum': 0}, 'totalsArePartial': {'type': 'boolean', 'description': 'True when more than 100 payments fall in the range or any returned amount is missing or invalid'}, 'recordCountIsLowerBound': {'type': 'boolean'}}, 'additionalProperties': False}
get_gym_schedule_summary
Count bookings per day
Use this when someone asks how busy their gym is or how many appointments or sessions are booked each day, past or upcoming. Returns booking counts per UTC day for one gym, whatever their status, for any window of at most 31 days (the next 7 by default); counting stops at 100. Not for counting cancellations or seeing which members are booked.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gymId'], 'properties': {'gymId': {'type': 'string', 'pattern': '^[0-9a-f]{24}$', 'description': "Id of one of the user's gyms, as the gym list returns it (24 lowercase hex characters)"}, 'endTime': {'type': 'string', 'maxLength': 32, 'description': 'End of the range as an ISO 8601 date-time, after startTime and at most 31 days later; defaults to 7 days after the start'}, 'startTime': {'type': 'string', 'maxLength': 32, 'description': 'Start of the range as an ISO 8601 date-time; defaults to now'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['range', 'recordCount', 'recordCountIsLowerBound', 'days'], 'properties': {'days': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'count'], 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'count': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'One row per UTC day that has bookings, canceled ones included. Aggregate counts only: appointment ids and times, member information, services, notes, trainer data and attendance history are never returned.'}, 'range': {'type': 'object', 'required': ['startTime', 'endTime'], 'properties': {'endTime': {'type': 'string', 'maxLength': 32}, 'startTime': {'type': 'string', 'maxLength': 32}}, 'additionalProperties': False}, 'recordCount': {'type': 'integer', 'minimum': 0}, 'recordCountIsLowerBound': {'type': 'boolean', 'description': 'True when more than 100 bookings fall in the range'}}, 'additionalProperties': False}
list_gyms
List your gyms
Use this when someone asks which gyms or studios they run in GymFlexa, or a gym's id is needed. Returns gyms with id, name, currency, default language and last edit time, alphabetical, 25 per page by default. Not for finding a member.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'description': 'Maximum number of gyms to return (default 25, maximum 100)', 'exclusiveMinimum': 0}, 'cursor': {'type': 'string', 'maxLength': 4096, 'description': 'The nextCursor of the previous page of this listing; absent for the first page'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gyms', 'hasMore', 'nextCursor'], 'properties': {'gyms': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'currency', 'defaultLocale', 'lastEditTime'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9a-f]{24}$'}, 'name': {'type': 'string', 'maxLength': 200}, 'currency': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{3}$'}, {'type': 'null'}]}, 'lastEditTime': {'anyOf': [{'type': 'string', 'maxLength': 32}, {'type': 'null'}]}, 'defaultLocale': {'anyOf': [{'type': 'string', 'maxLength': 16}, {'type': 'null'}]}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Gyms in the signed-in organization, alphabetical. Organization, address, contact, billing, integration and member data are never returned.'}, 'hasMore': {'type': 'boolean'}, 'nextCursor': {'anyOf': [{'type': 'string', 'maxLength': 4096}, {'type': 'null'}], 'description': 'Cursor for the next page; null on the last page'}}, 'additionalProperties': False}
list_services
Look up class and service prices
Use this when someone asks what their gym charges for a class, personal training session or other service. Returns catalog service names with price and last edit time for one gym, alphabetical, 25 per page by default. Not for what a particular member bought or attended.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gymId'], 'properties': {'gymId': {'type': 'string', 'pattern': '^[0-9a-f]{24}$', 'description': "Id of one of the user's gyms, as the gym list returns it (24 lowercase hex characters)"}, 'limit': {'type': 'integer', 'maximum': 100, 'description': 'Maximum services to return (default 25, maximum 100)', 'exclusiveMinimum': 0}, 'cursor': {'type': 'string', 'maxLength': 4096, 'description': 'The nextCursor of the previous page of this listing; absent for the first page'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['services', 'hasMore', 'nextCursor'], 'properties': {'hasMore': {'type': 'boolean'}, 'services': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'price', 'lastEditTime'], 'properties': {'name': {'type': 'string', 'maxLength': 200}, 'price': {'type': ['number', 'null'], 'description': "Price in the gym's currency"}, 'lastEditTime': {'anyOf': [{'type': 'string', 'maxLength': 32}, {'type': 'null'}]}}, 'additionalProperties': False}, 'maxItems': 100, 'description': 'Service catalog entries, alphabetical. Service ids, member history, notes, staff commissions, organization ids and arbitrary metadata are excluded.'}, 'nextCursor': {'anyOf': [{'type': 'string', 'maxLength': 4096}, {'type': 'null'}], 'description': 'Cursor for the next page; null on the last page'}}, 'additionalProperties': False}
show_gym_overview
Show gym overview
Use this when someone wants a quick overview or dashboard of one gym. Returns an overview card with the gym's details, booking counts for the next 7 days, open online-booking slots across up to 14 days with openings and up to 12 services with prices (no member, trainer or payment data). Not for a single member or booking.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['gymId'], 'properties': {'gymId': {'type': 'string', 'pattern': '^[0-9a-f]{24}$', 'description': "Id of one of the user's gyms, as the gym list returns it (24 lowercase hex characters)"}}}
Schéma de sortie
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['gym', 'scheduleRange', 'appointmentCount', 'appointmentCountIsLowerBound', 'scheduleDays', 'serviceCount', 'serviceCountIsLowerBound', 'services', 'availableDayCount', 'availableSlotCount', 'availabilityDays'], 'properties': {'gym': {'anyOf': [{'type': 'object', 'required': ['id', 'name', 'currency', 'defaultLocale', 'timezone'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9a-f]{24}$'}, 'name': {'type': 'string', 'maxLength': 200}, 'currency': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{3}$'}, {'type': 'null'}]}, 'timezone': {'anyOf': [{'type': 'string', 'maxLength': 64}, {'type': 'null'}]}, 'defaultLocale': {'anyOf': [{'type': 'string', 'maxLength': 16}, {'type': 'null'}]}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Gym metadata; null when not found. The overview never reads or returns member records, individual appointments or payments, attendance or service history, trainers, notes or health and fitness details.'}, 'services': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'price', 'lastEditTime'], 'properties': {'name': {'type': 'string', 'maxLength': 200}, 'price': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'lastEditTime': {'anyOf': [{'type': 'string', 'maxLength': 32}, {'type': 'null'}]}}, 'additionalProperties': False}, 'maxItems': 12}, 'scheduleDays': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'count'], 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 100}, 'serviceCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'scheduleRange': {'type': 'object', 'required': ['startTime', 'endTime'], 'properties': {'endTime': {'type': 'string', 'maxLength': 32}, 'startTime': {'type': 'string', 'maxLength': 32}}, 'additionalProperties': False}, 'appointmentCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'availabilityDays': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'count'], 'properties': {'day': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 14}, 'availableDayCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'availableSlotCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'serviceCountIsLowerBound': {'type': 'boolean'}, 'appointmentCountIsLowerBound': {'type': 'boolean'}}, 'additionalProperties': False}
Modifié
get_gym_payment_summary
1 October 2026 02:42
Modifié
show_gym_overview
29 September 2026 02:48
Modifié
list_services
29 September 2026 02:48
Modifié
get_gym_payment_summary
29 September 2026 02:48
Modifié
get_gym_schedule_summary
29 September 2026 02:48
Modifié
get_gym_availability
29 September 2026 02:48
Modifié
get_gym
29 September 2026 02:48
Modifié
list_gyms
29 September 2026 02:48
Ajouté
show_gym_overview
27 September 2026 02:40
Ajouté
list_services
27 September 2026 02:40
Ajouté
get_gym_payment_summary
27 September 2026 02:40
Ajouté
get_gym_schedule_summary
27 September 2026 02:40
Ajouté
get_gym_availability
27 September 2026 02:40
Ajouté
get_gym
27 September 2026 02:40
Ajouté
list_gyms
27 September 2026 02:40