Find gyms and studios, see classes and prices, and book with Gymmy.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Books a class at one of the signed-in member's gyms with their own membership (or puts them on the waitlist when full, if the gym allows). Uses the gym's booking rules. No payment is taken here.
Class date (YYYY-MM-DD).
Class id (from my_schedule).
Gym id (from my_schedule or my_gyms). Optional: found from the class when you belong to several gyms.
Answer language. Default fr.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Tool list last changed Oct 25, 2026.
Books a class at one of the signed-in member's gyms with their own membership (or puts them on the waitlist when full, if the gym allows). Uses the gym's booking rules. No payment is taken here.
| Argument | Type | Description |
|---|---|---|
| gym | string | Gym id (from my_schedule or my_gyms). Optional: found from the class when you belong to several gyms. |
| date* | string | Class date (YYYY-MM-DD). |
| locale | string | Answer language. Default fr. |
| class_id* | string | Class id (from my_schedule). |
{
"type": "object",
"required": [
"class_id",
"date"
],
"properties": {
"gym": {
"type": "string",
"description": "Gym id (from my_schedule or my_gyms). Optional: found from the class when you belong to several gyms."
},
"date": {
"type": "string",
"description": "Class date (YYYY-MM-DD)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
},
"class_id": {
"type": "string",
"description": "Class id (from my_schedule)."
}
},
"additionalProperties": false
}Buys a trial, a single class or a class pack at a Gymmy gym and books the class in one go, for the signed-in person (any Gymmy account, no membership needed). First call without confirm: returns the summary (price, class) to confirm with the person. Then call with confirm: true, first_name and last_name: returns a Stripe Checkout link on the gym's own account (the spot is held 30 min), or books right away when free. Follow up with checkout_status. Nothing is charged by this tool.
| Argument | Type | Description |
|---|---|---|
| gym* | string | Gymmy gym id (from search_classes). |
| date | string | Class date (YYYY-MM-DD). |
| locale | string | Answer language. Default fr. |
| confirm | boolean | true only after the person said yes to the summary returned by the first call. |
| site_id | string | Site id when the gym has several. |
| class_id | string | Class id (from search_classes). Optional with a class pack. |
| offer_id | string | Offer id (from search_classes offers). Default: the cheapest single entry. |
| last_name | string | The person's last name (needed with confirm). |
Cancels the signed-in member's booking (or waitlist spot) for a class. The gym's cancellation deadline applies; a late cancel may count as used.
| Argument | Type | Description |
|---|---|---|
| gym | string | Gym id (from my_schedule or my_gyms). Optional: found from the class when you belong to several gyms. |
| date* | string | Class date (YYYY-MM-DD). |
| locale | string | Answer language. Default fr. |
| class_id* | string | Class id (from my_schedule). |
{
"type": "object",
"required": [
"class_id",
"date"
],
"properties": {
"gym": {
"type": "string",
"description": "Gym id (from my_schedule or my_gyms). Optional: found from the class when you belong to several gyms."
},
"date": {
"type": "string",
"description": "Class date (YYYY-MM-DD)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
},
"class_id": {
"type": "string",
"description": "Class id (from my_schedule)."
}
},
"additionalProperties": false
}Status of a purchase started with book_dropin or join_gym (ref): pending (checkout open), processing (bank debit), paid, free or failed, and whether the gym now shows in the person's Gymmy account. The widget calls it by itself after the Stripe page opens; call it when the person says they paid or asks. The booking is confirmed by the gym's Stripe webhook either way.
| Argument | Type | Description |
|---|---|---|
| ref* | string | The ref returned by book_dropin or join_gym. |
| locale | string | Answer language. Default fr. |
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"description": "The ref returned by book_dropin or join_gym."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
}
},
"additionalProperties": false
}Details of a Gymmy gym: description, address, opening hours, sites, how to book, page and join links.
| Argument | Type | Description |
|---|---|---|
| gym* | string | Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id). |
| locale | string | Answer language. Default fr. |
{
"type": "object",
"required": [
"gym"
],
"properties": {
"gym": {
"type": "string",
"description": "Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
}
},
"additionalProperties": false
}Memberships, class packs and trial offers of a Gymmy gym with prices in EUR and a direct sign-up link per offer.
| Argument | Type | Description |
|---|---|---|
| gym* | string | Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id). |
| locale | string | Answer language. Default fr. |
{
"type": "object",
"required": [
"gym"
],
"properties": {
"gym": {
"type": "string",
"description": "Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
}
},
"additionalProperties": false
}Upcoming classes of a Gymmy gym (next 14 days): time, duration, spots left, and a booking link with the class already picked.
| Argument | Type | Description |
|---|---|---|
| gym* | string | Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id). |
| date | string | Only this day (YYYY-MM-DD). |
| locale | string | Answer language. Default fr. |
{
"type": "object",
"required": [
"gym"
],
"properties": {
"gym": {
"type": "string",
"description": "Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."
},
"date": {
"type": "string",
"description": "Only this day (YYYY-MM-DD)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
}
},
"additionalProperties": false
}Signs the signed-in person up to a Gymmy gym's membership or class pack (from get_prices), paid on the gym's own Stripe Checkout page. First call without confirm returns the summary to confirm; then confirm: true with first_name and last_name returns the payment link. Follow up with checkout_status. For a single class or a trial with a class, use book_dropin.
| Argument | Type | Description |
|---|---|---|
| gym* | string | Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id). |
| locale | string | Answer language. Default fr. |
| confirm | boolean | true only after the person said yes to the summary returned by the first call. |
| site_id | string | Site id when the gym has several. |
| offer_id* | string | Offer id (from get_prices). |
| last_name | string | The person's last name (needed with confirm). |
| first_name | string | The person's first name (asked once, needed with confirm). |
{
"type": "object",
"required": [
"gym",
"offer_id"
],
"properties": {
"gym": {
"type": "string",
"description": "Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
},
"confirm": {
"type": "boolean",
"description": "true only after the person said yes to the summary returned by the first call."
},
"site_id": {
"type": "string",
"description": "Site id when the gym has several."
},
"offer_id": {
"type": "string",
"description": "Offer id (from get_prices)."
},
"last_name": {
"type": "string",
"description": "The person's last name (needed with confirm)."
},
"first_name": {
"type": "string",
"description": "The person's first name (asked once, needed with confirm)."
}
},
"additionalProperties": false
}The signed-in member's upcoming booked and waitlisted classes (next 2 weeks), across all their Gymmy gyms (or one with gym).
| Argument | Type | Description |
|---|---|---|
| gym | string | Only this gym (id from my_gyms). Default: all your gyms. |
| locale | string | Answer language. Default fr. |
{
"type": "object",
"properties": {
"gym": {
"type": "string",
"description": "Only this gym (id from my_gyms). Default: all your gyms."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
}
},
"additionalProperties": false
}Gyms the signed-in Gymmy member belongs to.
| Argument | Type | Description |
|---|---|---|
| locale | string | Answer language. Default fr. |
{
"type": "object",
"properties": {
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
}
},
"additionalProperties": false
}Classes for a week at the signed-in member's gyms (all of them, or one with gym), with the class ids book_class needs, spots left and whether they are booked.
| Argument | Type | Description |
|---|---|---|
| gym | string | Only this gym (id from my_gyms). Default: all your gyms. |
| week | string | Any day of the week (YYYY-MM-DD). Default this week. |
| locale | string | Answer language. Default fr. |
{
"type": "object",
"properties": {
"gym": {
"type": "string",
"description": "Only this gym (id from my_gyms). Default: all your gyms."
},
"week": {
"type": "string",
"description": "Any day of the week (YYYY-MM-DD). Default this week."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
}
},
"additionalProperties": false
}Classes open to visitors right now at Gymmy gyms that accept drop-ins from anywhere (trial, single class or class pack), near a place or point, optionally one day or one kind of class ('hyrox', 'yoga'). Each result has the gym, class_id, date, spots left, the cheapest price and the offers that book it (offer_id). Book one with book_dropin.
| Argument | Type | Description |
|---|---|---|
| gym | string | Only this gym (Gymmy id from search_gyms). |
| lat | number | Latitude to search around. |
| lng | number | Longitude to search around. |
| date | string | Only this day (YYYY-MM-DD). |
| class | string | Kind of class or coach to match, e.g. 'WOD', 'HYROX', 'Yoga'. |
| limit | integer | Max results. Default 15. |
| query | string | Place to search around: address, district, city or postcode ('Lyon 7', 'Bastille'). Geocoded when no lat/lng is given. |
| locale | string | Answer language. Default fr. |
| radius_km |
Find gyms and studios (CrossFit, HYROX, fitness, yoga, pilates, boxing, martial arts, dance) in France and Europe, near a point or by name, city or postcode. Gymmy gyms (onGymmy: true) can be booked; others are listed from OpenStreetMap, not bookable, with a claim link. Use the `gym` value with get_gym, get_schedule, get_prices or start_trial.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude to search around. |
| lng | number | Longitude to search around. |
| limit | integer | Max results. Default 10. |
| query | string | Gym name, address, district, city or postcode, e.g. 'Lyon', '12 rue Oberkampf Paris' or 'CrossFit Nantes'. Places are geocoded when no lat/lng is given. |
| locale | string | Answer language. Default fr. |
| activity | string | Only this activity (studios not on Gymmy). |
| radius_km | number | Radius in km, 1 to 50. Default: 10, or fitted to the geocoded place (3 for an address). |
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"description": "Latitude to search around."
},
"lng": {
"type": "number",
"description": "Longitude to search around."
},
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Max results. Default 10."
},
"query": {
"type": "string",
"description": "Gym name, address, district, city or postcode, e.g. 'Lyon', '12 rue Oberkampf Paris' or 'CrossFit Nantes'. Places are geocoded when no lat/lng is given."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
},
"activity": {
"enum": [
"crossfit",
"hyrox",
"fitness",
"yoga",
"pilates",
"boxing",
"martial_arts",
"dance",
"climbing"
],
"type": "string",
"description": "Only this activity (studios not on Gymmy)."
},
"radius_km": {
"type": "number",
"description": "Radius in km, 1 to 50. Default: 10, or fitted to the geocoded place (3 for an address)."
}
},
"additionalProperties": false
}Gives the link to book a trial class at a Gymmy gym, with the trial offer and optionally the class already picked. The person opens it and confirms with their name and email; nothing is booked or charged by this tool.
| Argument | Type | Description |
|---|---|---|
| gym* | string | Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id). |
| date | string | Class date (YYYY-MM-DD). |
| locale | string | Answer language. Default fr. |
| class_id | string | Class id from get_schedule. |
{
"type": "object",
"required": [
"gym"
],
"properties": {
"gym": {
"type": "string",
"description": "Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."
},
"date": {
"type": "string",
"description": "Class date (YYYY-MM-DD)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
},
"class_id": {
"type": "string",
"description": "Class id from get_schedule."
}
},
"additionalProperties": false
}| first_name |
| string |
| The person's first name (asked once, needed with confirm). |
{
"type": "object",
"required": [
"gym"
],
"properties": {
"gym": {
"type": "string",
"description": "Gymmy gym id (from search_classes)."
},
"date": {
"type": "string",
"description": "Class date (YYYY-MM-DD)."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
},
"confirm": {
"type": "boolean",
"description": "true only after the person said yes to the summary returned by the first call."
},
"site_id": {
"type": "string",
"description": "Site id when the gym has several."
},
"class_id": {
"type": "string",
"description": "Class id (from search_classes). Optional with a class pack."
},
"offer_id": {
"type": "string",
"description": "Offer id (from search_classes offers). Default: the cheapest single entry."
},
"last_name": {
"type": "string",
"description": "The person's last name (needed with confirm)."
},
"first_name": {
"type": "string",
"description": "The person's first name (asked once, needed with confirm)."
}
},
"additionalProperties": false
}| number |
| Radius in km, 1 to 50. Default 15, or fitted to the place. |
{
"type": "object",
"properties": {
"gym": {
"type": "string",
"description": "Only this gym (Gymmy id from search_gyms)."
},
"lat": {
"type": "number",
"description": "Latitude to search around."
},
"lng": {
"type": "number",
"description": "Longitude to search around."
},
"date": {
"type": "string",
"description": "Only this day (YYYY-MM-DD)."
},
"class": {
"type": "string",
"description": "Kind of class or coach to match, e.g. 'WOD', 'HYROX', 'Yoga'."
},
"limit": {
"type": "integer",
"maximum": 40,
"minimum": 1,
"description": "Max results. Default 15."
},
"query": {
"type": "string",
"description": "Place to search around: address, district, city or postcode ('Lyon 7', 'Bastille'). Geocoded when no lat/lng is given."
},
"locale": {
"enum": [
"fr",
"en"
],
"type": "string",
"description": "Answer language. Default fr."
},
"radius_km": {
"type": "number",
"description": "Radius in km, 1 to 50. Default 15, or fitted to the place."
}
},
"additionalProperties": false
}