{"name":"com.hellogymmy/gymmy","slug":"hellogymmy-gymmy","title":"Gymmy","description":"Find gyms and studios, see classes and prices, and book with Gymmy.","url":"https://mcp.market/server/hellogymmy-gymmy","rating":null,"grade":"B","score":81,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-10-26T15:23:00.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T07:00:34.799Z","last_ok_at":"2026-11-04T07:00:34.799Z","latency_ms":134},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/zdeadex/gymmy-mcp","website":"https://hellogymmy.com","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://hellogymmy.com/api/mcp"}],"packages":[],"tools":[{"name":"book_class","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"class_id":{"type":"string","description":"Class id (from my_schedule)."},"date":{"type":"string","description":"Class date (YYYY-MM-DD)."},"gym":{"type":"string","description":"Gym id (from my_schedule or my_gyms). Optional: found from the class when you belong to several gyms."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["class_id","date"],"additionalProperties":false}},{"name":"book_dropin","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"gym":{"type":"string","description":"Gymmy gym id (from search_classes)."},"class_id":{"type":"string","description":"Class id (from search_classes). Optional with a class pack."},"date":{"type":"string","description":"Class date (YYYY-MM-DD)."},"offer_id":{"type":"string","description":"Offer id (from search_classes offers). Default: the cheapest single entry."},"site_id":{"type":"string","description":"Site id when the gym has several."},"confirm":{"type":"boolean","description":"true only after the person said yes to the summary returned by the first call."},"first_name":{"type":"string","description":"The person's first name (asked once, needed with confirm)."},"last_name":{"type":"string","description":"The person's last name (needed with confirm)."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["gym"],"additionalProperties":false}},{"name":"cancel_booking","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"class_id":{"type":"string","description":"Class id (from my_schedule)."},"date":{"type":"string","description":"Class date (YYYY-MM-DD)."},"gym":{"type":"string","description":"Gym id (from my_schedule or my_gyms). Optional: found from the class when you belong to several gyms."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["class_id","date"],"additionalProperties":false}},{"name":"checkout_status","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ref":{"type":"string","description":"The ref returned by book_dropin or join_gym."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["ref"],"additionalProperties":false}},{"name":"get_gym","description":"Details of a Gymmy gym: description, address, opening hours, sites, how to book, page and join links.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gym":{"type":"string","description":"Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["gym"],"additionalProperties":false}},{"name":"get_prices","description":"Memberships, class packs and trial offers of a Gymmy gym with prices in EUR and a direct sign-up link per offer.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gym":{"type":"string","description":"Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["gym"],"additionalProperties":false}},{"name":"get_schedule","description":"Upcoming classes of a Gymmy gym (next 14 days): time, duration, spots left, and a booking link with the class already picked.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["gym"],"additionalProperties":false}},{"name":"join_gym","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gym":{"type":"string","description":"Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."},"offer_id":{"type":"string","description":"Offer id (from get_prices)."},"site_id":{"type":"string","description":"Site id when the gym has several."},"confirm":{"type":"boolean","description":"true only after the person said yes to the summary returned by the first call."},"first_name":{"type":"string","description":"The person's first name (asked once, needed with confirm)."},"last_name":{"type":"string","description":"The person's last name (needed with confirm)."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["gym","offer_id"],"additionalProperties":false}},{"name":"my_bookings","description":"The signed-in member's upcoming booked and waitlisted classes (next 2 weeks), across all their Gymmy gyms (or one with gym).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gym":{"type":"string","description":"Only this gym (id from my_gyms). Default: all your gyms."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"additionalProperties":false}},{"name":"my_gyms","description":"Gyms the signed-in Gymmy member belongs to.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"additionalProperties":false}},{"name":"my_schedule","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"additionalProperties":false}},{"name":"search_classes","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Place to search around: address, district, city or postcode ('Lyon 7', 'Bastille'). Geocoded when no lat/lng is given."},"lat":{"type":"number","description":"Latitude to search around."},"lng":{"type":"number","description":"Longitude to search around."},"radius_km":{"type":"number","description":"Radius in km, 1 to 50. Default 15, or fitted to the place."},"class":{"type":"string","description":"Kind of class or coach to match, e.g. 'WOD', 'HYROX', 'Yoga'."},"date":{"type":"string","description":"Only this day (YYYY-MM-DD)."},"gym":{"type":"string","description":"Only this gym (Gymmy id from search_gyms)."},"limit":{"type":"integer","minimum":1,"maximum":40,"description":"Max results. Default 15."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"additionalProperties":false}},{"name":"search_gyms","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"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."},"lat":{"type":"number","description":"Latitude to search around."},"lng":{"type":"number","description":"Longitude to search around."},"radius_km":{"type":"number","description":"Radius in km, 1 to 50. Default: 10, or fitted to the geocoded place (3 for an address)."},"activity":{"type":"string","enum":["crossfit","hyrox","fitness","yoga","pilates","boxing","martial_arts","dance","climbing"],"description":"Only this activity (studios not on Gymmy)."},"limit":{"type":"integer","minimum":1,"maximum":25,"description":"Max results. Default 10."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"additionalProperties":false}},{"name":"start_trial","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gym":{"type":"string","description":"Gym identifier: the `gym` value from search_gyms (page slug or Gymmy id)."},"class_id":{"type":"string","description":"Class id from get_schedule."},"date":{"type":"string","description":"Class date (YYYY-MM-DD)."},"locale":{"type":"string","enum":["fr","en"],"description":"Answer language. Default fr."}},"required":["gym"],"additionalProperties":false}}],"scan":{"score":81,"grade":"B","scanned_at":"2026-10-26T18:58:41.809Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-26T18:58:41.734Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 816ms"]},"poisoning":{"score":15,"max":15,"notes":["14 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["endpoint served from the registry-verified namespace domain"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://hellogymmy.com/api/mcp","reachable":true,"authRequired":false,"latencyMs":816,"serverInfo":{"name":"gymmy","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"zdeadex","repo":"gymmy-mcp","archived":false,"pushedAt":"2026-10-26T15:23:00Z","stars":0,"forks":0,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/51711900?v=4","ownerCreatedAt":"2019-06-11T14:47:53Z","license":"MIT"},"icon":{"url":"https://hellogymmy.com/brand/icon-512.png","source":"registry","width":512,"height":512},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-10-26T15:23:00.000Z","score":23}}}},"grade_history":[],"reviews":[]}