Connecting Claude or ChatGPT to your gym
Let an AI assistant read your programming, draft workouts, and look things up — with every risky change confirmed by a staff member in the app.
Updated September 9, 2026
OurGym can be connected to Claude (Claude.ai, the Claude desktop app, and Claude Code) and to ChatGPT, so you can ask an assistant to work with your gym directly: “what’s programmed for CrossFit this week?”, “draft Friday: 5×5 back squat, then Fran”, “add a Barbell Club track”, “how many members joined in August?”. The assistant talks to OurGym over the same connection standard those products use for other apps (the Model Context Protocol), so there is nothing to install on your side.
Two rules hold no matter which assistant you use:
- It only ever does what its permissions allow. You choose those when you connect, and you can narrow or remove them at any time.
- It never publishes, deletes, or touches money on its own. Anything risky is prepared as a change for a staff member to confirm in OurGym. Until someone confirms, nothing has happened.
What it can do
With the right permissions, an assistant can do most of what the staff app does:
-
Programming — read the calendar, the workout library, and the movement library; draft workouts and put them on a day; create and rename tracks; add movements and benchmarks; set up a training cycle. Anything it drafts lands as a draft, exactly as if a coach had written it and not pressed Publish day yet.
It finds your tracks by name, ignoring capitals and spaces — ask for “crossfit” and it lands on your
Cross FITtrack rather than quietly creating a second one. If it can’t find a track under any spelling it will say so and ask before creating one. -
Looking things up — members and their membership status, the class schedule and bookings, reports.
-
Everything else the staff app offers — classes, leads, retail, staff operations, gym settings — each behind its own permission.
It cannot manage API keys or other connected apps, whatever permissions it has.
Two ways to connect
| If you use… | Connect with… | Who can set it up |
|---|---|---|
| Claude Code, or a Claude connector an admin configures for the whole workspace | an API key from Manage → API keys | Owners and admins |
| Claude.ai, the Claude desktop app, or ChatGPT | your own OurGym sign-in (OAuth) | Any staff member |
An API key acts for the gym as a whole, with the permissions you give it when you create it. A sign-in connection acts as you: it can never do more than your own role in OurGym allows, and it is tied to one gym — if you work at two gyms, connect once per gym.
ChatGPT only supports the sign-in route; it cannot be given an API key.
Your gym’s connection address
Every assistant asks for a URL. It is your OurGym API address followed by
/mcp:
https://api.production.ourgym.app/mcp
Type it exactly, with no trailing slash.
Quick start
Whichever assistant you use, setup is the same three things: the connection address, a way to sign in (a key or your own OurGym login), and a first question to check it works. Try “What’s programmed for CrossFit this week?” — a read that needs no confirmation — before asking it to draft anything.
Claude Code
Best for coaches and admins who already work in a terminal. Two ways in.
With an API key (acts for the whole gym; owners and admins only):
-
In OurGym, go to Manage → API keys and press Create key. Name it (say, “Claude Code — programming”) and tick the permissions it should have. For programming, tick Read and Create and change under Programming and workouts. Leave Publish programming off unless you want the assistant to be able to request publishing (a staff member still has to confirm it).
-
Press Create key. The screen shows the key once, together with a ready-made command. Press Copy next to the command — it looks like:
claude mcp add --transport http ourgym https://api.production.ourgym.app/mcp --header "Authorization: Bearer <your key>" -
Paste the command into a terminal and press Enter. Run
claude mcp list; OurGym should show as Connected. -
Start Claude Code and ask your first question. Claude Code asks your permission before each change it makes.
If you lose the key, revoke it under Manage → API keys and create a new one; the old command stops working immediately.
With your own sign-in (acts as you; any staff member):
-
In a terminal, run the same command without the
--headerpart:claude mcp add --transport http ourgym https://api.production.ourgym.app/mcp -
Start Claude Code, type
/mcp, choose ourgym, then Authenticate. -
Your browser opens OurGym’s connection page. Sign in if you aren’t already (the usual email code), pick the gym if you belong to more than one, review the permissions, and press Approve. The page sends you back to Claude Code, which now shows OurGym as connected.
Claude.ai and the Claude desktop app
Any staff member; acts as you.
- Open Settings → Connectors (on the web: click your initials, then Settings; in the desktop app: Claude → Settings) and press Add custom connector.
- Give it a name (say, “OurGym”) and paste the connection address:
https://api.production.ourgym.app/mcp. Leave the advanced fields empty — OurGym doesn’t need a client ID or secret. Press Add. - Press Connect on the new connector. Claude opens OurGym’s connection page: sign in if you aren’t already, pick the gym if you belong to more than one, review the permissions, and press Approve.
- Back in Claude, start a chat, open the + (or Search and tools) menu and make sure OurGym is switched on, then ask your first question. Claude asks before it changes anything.
A workspace admin on a Team or Enterprise plan can instead add the connector once for everyone and put an API key in the connector’s request header (the same kind of key you’d create for Claude Code). Members of the workspace then skip the sign-in step.
ChatGPT
Any staff member; acts as you. ChatGPT only connects through your sign-in — it cannot be given an API key.
- Turn on developer mode: open Settings → Apps & Connectors (older builds: Connectors), open Advanced settings, and switch on Developer mode.
- Back on the Apps & Connectors page, press Create. Fill in a name
(say, “OurGym”), a short description, and the MCP server URL:
https://api.production.ourgym.app/mcp. Under Authentication choose OAuth. Leave the client ID and secret empty. Press Create. - ChatGPT sends you to OurGym’s connection page: sign in if you aren’t already, pick the gym, review the permissions, and press Approve.
- In a new chat, open the + menu, choose More → Developer mode, tick OurGym, and ask your first question. ChatGPT asks you before every change it makes.
Developer mode is per account: each staff member who wants to use ChatGPT with the gym connects it themselves.
Checking it worked
Ask something that only reads: “which movements do we have?” or “who’s booked into tomorrow’s 6 am class?”. If the assistant answers from your gym’s data, you’re connected. If it says a permission is missing, see Troubleshooting.
Permissions, in plain words
Permissions come in groups that match the parts of the app, and each group has two levels: Read (look, never change) and Create and change (which includes reading).
| Group | Read lets it… | Create and change lets it… |
|---|---|---|
| Programming and workouts | see the calendar, workouts, movements, results | draft workouts, program days, add tracks and movements |
| Members and waivers | look up members and their status | update member details |
| Classes and the schedule | see the timetable and bookings | change classes and bookings |
| Billing and payments | see invoices and balances | request billing changes (always confirmed by staff) |
| Reports | run reports | — |
| Leads and sales | see leads | add and update leads |
| Retail and products | see products | change products |
| Facilities and access | see locations and access | change them |
| Staff operations | see staff-related records | change them |
| Gym settings | see settings | change settings |
One permission stands alone: Publish programming so members can see it. Without it, an assistant can draft all week but can never even request that a day be published. With it, the request still goes to a staff member to confirm.
Give an assistant the least it needs. For a programming helper, that’s Programming and workouts (both levels) and perhaps Members and waivers: Read.
What happens with a risky change
Small, reversible things happen straight away, and the assistant itself asks you before doing them: drafting a workout, putting one on a day, creating a track, logging a result. Nothing in that list is visible to a member until a coach publishes the day, so making you leave the chat and confirm it a second time in OurGym would only slow you down. Instead the assistant hands back a table of what it wrote — or, if you ask it to preview first, of what it is about to write — and you approve it in the conversation you’re already in.
Anything bigger is handled differently:
- publishing or unpublishing a day,
- changing something members already see — editing a workout or a piece on a published day, archiving a track, activating a training cycle,
- archiving or clearing things,
- anything involving money,
- bulk changes.
For these, the assistant prepares the change and hands you a link into OurGym instead of doing it. A staff member opens the link — it goes to the AI review inbox in the staff app (also under Settings → AI review, with a count of what’s waiting) — and sees what the change would do: the operation, who asked for it (which key or which connected app), and a preview of the effect. They press Confirm or Reject.
Three things to know about confirming:
- It counts as your action. Confirming runs the change with your own permissions, so a coach can’t confirm something a coach couldn’t do in the first place.
- The link is good for 24 hours. After that the request expires and the assistant has to prepare it again.
- The assistant waits. Claude and ChatGPT will tell you they need a confirmation and, once you’ve confirmed in OurGym, report the result. Until then, nothing has changed.
Seeing the workouts before you say yes
Ask an assistant to program a week and it should show you the week — as a table, with each workout’s actual text in it, not a count of what it wrote.
When it’s about to write, ask it to preview first (“show me Friday before you write it”). It comes back with what it would create: the title, the track, the date, whether the day would be a draft, and one row per part with that part’s prescription, its score type, its interval structure and its time cap. Nothing has been written at that point, and the assistant is told to say so.
After it writes, the same table comes back describing what actually landed. The two are generated from the same source, so they can’t quietly differ.
To see what’s already there, ask for the programming over a date range (“what’s on CrossFit next week?”). You get a row per piece: the date, the workout’s title and a one-line summary of it, whether it’s a draft or published, and — for a coach’s note — the note itself.
If an assistant answers a programming question with a count (“I created 12 workouts”) rather than the workouts, ask it to show you the table it was given. It has one.
Ids are deliberately left out of everything the assistant shows you. Names are what a coach reads; the assistant still has the ids it needs to work with.
Drafts and publishing
Programming an assistant writes is always a draft. It appears on the programming calendar with the Draft chip, coaches can edit it, and members see nothing. Publishing a day is a staff action — either in the calendar as usual, or by confirming the assistant’s publish request in the AI review inbox. See Using workouts and programming.
A drafted day keeps its shape. If you write a session in parts — “A. Strength / skill”, “B. Metcon” — the assistant should give each separately scored part its own entry on the day, so the lift and the metcon land as two pieces you can publish, comment on and move independently, each keeping its own result. Anything that only describes one of them (its scaling tiers, a buy-in, a cash-out) stays inside that piece, and a session warm-up or cool-down arrives as a coach note on the day. If a day turns up as one long paragraph, or with the lift and the metcon bundled into a single workout, tell the assistant to split it. Rewriting an existing workout is a reviewed change, so you’ll get a review link to confirm in the app rather than an instant fix — nothing is lost either way, and members never saw the draft.
The app helps here: it refuses a workout that mixes two differently scored parts unless someone explicitly asks for them together, so an assistant has to either split them or come back and ask you.
Assistants can’t import CSVs
Import CSV is yours alone — it isn’t offered to assistants, and one that tries is refused. The format carries no structure, so every row lands as a single block of text with no parts, no per-part score types and no time caps. That’s the right trade when you’re migrating a file your old software exported and you expect to tidy it up. It’s the wrong one for programming an assistant just wrote, and an assistant can’t tell the two apart — a CSV a writing tool generated for another gym platform looks exactly like an export.
So if you hand an assistant a CSV of programming, expect it to read the file and write each day properly, not to bulk-load it. That’s slower and it’s the point: what lands keeps its strength piece, its metcon, its scaling and its caps.
Disconnecting
- API keys: Manage → API keys, then Revoke on the key. Anything using it stops working immediately.
- Sign-in connections: Settings → Connected apps lists every assistant you’ve connected, with the gym, the permissions, and when it was last used. Disconnect ends it at once.
Revoking a connection doesn’t undo anything it already did; the audit trail records every change it made.
Troubleshooting
- “Could not connect” or the assistant never asks to sign in. Check the
address: it must be exactly your API address followed by
/mcp, withhttps://and no trailing slash. - “This connection is missing the required scope”. The key or connection wasn’t given that permission. Create a key with the permission, or disconnect and reconnect, ticking it on the permissions screen.
- “This operation is not available to API keys or connected AI clients”. That action isn’t something assistants can do at all (managing keys, for example). Do it in the app.
- A whole day arrived as one entry. Ask the assistant to split it (“put the strength work and the metcon on the day as separate pieces”). Rewriting a workout is a reviewed change, so confirm the review link it gives you — or just fix it yourself in the composer.
- The review link says it expired. More than 24 hours passed. Ask the assistant to prepare the change again.
- The review link says it belongs to a different gym. You’re signed in to another gym’s account than the one the assistant is connected to. Switch gyms and open the link again.
- A Claude.ai or ChatGPT connection stopped working after a while. Sign-in connections refresh themselves; if one was revoked in Connected apps, or the same connection was set up on two devices that fell out of step, simply connect again.
Something here out of date, or a step that didn't work? Tell us at support@ourgym.app.